2015-07-21 1 views
0

Следующий запрос MS Access SQL Дано:Как определить запрос TRANSFORM/PIVOT в SQL Server?

PARAMETERS Formulare![Hauptmenü]![Startdatum] DateTime, Formulare![Hauptmenü]![Enddatum] DateTime; 

TRANSFORM Count(ds.Datum) AS AnzahlDatum 

SELECT ds.quote_rate 
FROM ds 
GROUP BY ds.quote_rate 
ORDER BY ds.quote_rate DESC , ds.isin 
PIVOT ds.isin; 

Я пытаюсь код выше, чтобы определить в SQL Server хранимой процедуры:

CREATE PROCEDURE [dbo].[MonthRepo] 
    -- Add the parameters for the stored procedure here 
    @from datetime, 
    @to datetime 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM (
     SELECT ds.datum AS DateSum, 
       ds.ct_quot_rate AS Quote, 
       ds.isin 
     FROM ds 
     WHERE ds.datum >= @from AND ds.datum <= @to 
    ) tbl 
    PIVOT (
     ROUND(Quote,0) --Incorrect syntax near '0'. Expecting '.', ID, or QUOTED_ID 
     FOR isin IN(AB000001, AB000002, AB000003) --Incorrect syntax near 'AB000001'. Expecting '(', or SELECT 
    ) piv 
END 

Но я получаю сообщение об ошибке вы можете увидеть сообщение в коде. PIVOT это немного сложно для меня ..

В таблице вы можете увидеть ниже, когда даты ввода являются @from='2015-01-01', @to='2015-01-03':

datum  | quote_rate | isin 
================================== 
2015-01-01 | 100  | AB000001 
2015-01-01 | 100  | AB000002 
2015-01-02 | 98   | AB000003 
2015-01-02 | 70   | AB000001 
2015-01-03 | 100  | AB000001 

И эту таблицу я хочу добиться:

quote_rate | AB000001 | AB000002 | AB000003 
=========================================== 
100  |  2 |  1 | 
98   |   |   |  1 
70   |  1 |   | 

EDIT:

Статическое решение:

CREATE PROCEDURE [dbo].[MonthRepo] 
     -- Add the parameters for the stored procedure here 
     @from datetime, 
     @to datetime 
    AS 
    BEGIN 
     SET NOCOUNT ON; 

     SELECT * 
     FROM (
      SELECT ds.datum AS DateSum, 
        ds.ct_quot_rate AS Quote, 
        ds.isin 
      FROM ds 
      WHERE ds.datum >= @from AND ds.datum <= @to 
     ) tbl 
     PIVOT (
      COUNT(Quote) 
      FOR isin IN(AB000001, AB000002, AB000003) 
     ) piv 
    END 

Новый вопрос: как я могу определить свой статический код для запроса DYNAMIC?

ответ

1

Попробуйте что-то вроде этого ....

SELECT * 
FROM (
    SELECT ds.datum AS DateSum, 
      ROUND(ds.ct_quot_rate,0) AS Quote, 
      ds.isin 
    FROM ds 
    WHERE ds.datum >= @from AND ds.datum <= @to 
) tbl 
PIVOT (
    COUNT(Quote) --Incorrect syntax near '0'. Expecting '.', ID, or QUOTED_ID 
    FOR isin 
    IN(AB000001, AB000002, AB000003) --Incorrect syntax near 'AB000001'. Expecting '(', or SELECT 
) piv 
+0

Можете ли вы сказать мне, как я могу определить мой статический код для динамического запроса? – yuro

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