如何在 SQL 服务器中定义查询 TRANSFORM/PIVOT?

How to define query TRANSFORM/PIVOT in SQL Server?

给出以下 MS Access SQL 查询:

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 服务器存储过程中定义:

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'时,您可以在下面看到table:

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

而这个table我想实现:

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

编辑:

静态解决方案:

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

新问题是,如何将我的静态代码定义为动态查询?

试试这样的……

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