2015-03-30 6 views
1

мне нужно помочь преобразовать этот запрос MS Access в SQL Server 2012:Convert Access ТРАНСФОРМ/PIVOT запрос к SQL Server 2012

TRANSFORM 
SUM(TTQTY * qty) AS quantity 
SELECT matlprodcode AS product_code, cvend_name AS supplier, CITMCD AS material, matldesc AS description, MIN(unit_cost) AS unit_cost 
FROM acs_Budget 
WHERE matlprodcode NOT LIKE ';I8*' 
AND matlprodcode NOT LIKE 'I1' 
GROUP BY matlprodcode, cvend_name, CITMCD, matldesc 
PIVOT budgetmonth; 

Я попытался преобразовать это сам здесь:

SELECT matlprodcode AS product_code, 
    cvend_name AS supplier, 
    CITMCD AS material, 
    matldesc AS 'description', 
    MIN(unit_cost) AS unit_cost 
FROM 
(
    SELECT TTQTY, qty, matlprodcode, cvend_name, CITMCD, matldesc, unit_cost, budgetmonth FROM acs_Budget WHERE matlprodcode NOT LIKE ';I8*' AND matlprodcode NOT LIKE 'I1' 
) AS T 
PIVOT 
(
    SUM(TTQTY * qty) 
) P 

Это верный? Какие-либо предложения? Или я в отъезде?

ответ

0

Ну, я сам это понял. Я не уверен, что это поможет другим, но вот окончательный запрос, который будет работать в SQL Server. Я преобразовал это из MS Access:

SELECT pt.* FROM 
(SELECT SUM(TTQTY * qty) AS quantity, matlprodcode AS product_code, cvend_name AS supplier, CITMCD as material, matldesc AS description, MIN(unit_cost) AS unit_cost, budgetmonth 
FROM acs_Budget 
WHERE matlprodcode NOT LIKE ';I8*' 
AND matlprodcode NOT LIKE 'I1' 
GROUP BY matlprodcode, cvend_name, CITMCD, matldesc, budgetmonth) AS src 
PIVOT (MIN(quantity) FOR src.budgetmonth IN ([4/1/2015], [5/1/2015], [6/1/2015], [7/1/2015], [8/1/2015], [9/1/2015], [10/1/2015], [11/1/2015], [12/1/2015], [1/1/2016], [2/1/2016], [3/1/2016])) AS pt; 

Некоторые вещи, которые помогли мне:

  • Сначала я выбрал все, что я хотел бы видеть. Включая то, что MS Access преобразовывал и поворачивал.
  • Затем я узнал, что каждый столбец MS Access поворачивал, в этом случае количество.
  • Итак, я сделал MIN, потому что PIVOT нуждается в агрегированной функции.
  • После агрегированной функции вам нужен фактический PIVOT, который использует MS Access, который идет после FOR.
  • Тогда я сделал что-то похожее на SELECT DISTINCT budgetmonth FROM acs_Budget получить каждый элемент я мог поворачиваться на и вот где вошел в.

Не уверен, что если бы я объяснил очень хорошо, но это, как я получил мой работать!

Смежные вопросы