如何在 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
给出以下 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