SQL 行输出类似于列
SQL row output like column
我的table设计如下:
销售:
PCode SaleDate SaleValue
1 2015-01-01 50000
2 2015-01-01 50000
3 2015-01-01 50000
4 2015-01-01 50000
5 2015-01-01 50000
1 2015-01-02 50000
2 2015-01-02 50000
3 2015-01-02 50000
4 2015-01-02 50000
5 2015-01-02 50000
select PCode,SaleDate,SUM(SaleValue) as Sales
from [BSales]
where SaleDate between '2015-01-01' and '2015-01-05'
group by PCode,SaleDate
这部分满足了我的愿望output.But我想输出如下:
PCode '2015-01-01' '2015-01-02' '2015-01-03' '2015-01-04' '2015-01-05'
1 5000 50000 0 0 0
2 5000 50000 0 0 0
3 5000 50000 0 0 0
4 5000 50000 0 0 0
5 5000 50000 0 0 0
是否可以使用 sql 查询?或 T-SQL?或使用存储过程?非常感谢任何人的帮助。
您需要查看 T-SQL 中的主元选项。
例如(未测试!)
SELECT *
FROM BSales
PIVOT(SUM(SaleValue)
FOR SaleDate IN ([2015-01-01], [2015-01-02]
, [2015-01-03], [2015-01-04], [2015-01-05])) AS PVTTable
这里有完整的教程。
http://sqlhints.com/2014/03/10/pivot-and-unpivot-in-sql-server/
这是关键任务:
DECLARE @t TABLE
(
PCode INT ,
SaleDate DATE ,
SaleValue MONEY
)
INSERT INTO @t
VALUES ( 1, '2015-01-01', 50000 ),
( 2, '2015-01-01', 50000 ),
( 3, '2015-01-01', 50000 ),
( 4, '2015-01-01', 50000 ),
( 5, '2015-01-01', 50000 ),
( 1, '2015-01-02', 50000 ),
( 2, '2015-01-02', 50000 ),
( 3, '2015-01-02', 50000 ),
( 4, '2015-01-02', 50000 ),
( 5, '2015-01-02', 50000 )
SELECT PCode ,
ISNULL([2015-01-01], 0) AS [2015-01-01] ,
ISNULL([2015-01-02], 0) AS [2015-01-02] ,
ISNULL([2015-01-03], 0) AS [2015-01-03] ,
ISNULL([2015-01-04], 0) AS [2015-01-04] ,
ISNULL([2015-01-05], 0) AS [2015-01-05]
FROM @t PIVOT( MAX(SaleValue) FOR SaleDate IN ( [2015-01-01], [2015-01-02],
[2015-01-03], [2015-01-04],
[2015-01-05] ) ) p
输出:
PCode 2015-01-01 2015-01-02 2015-01-03 2015-01-04 2015-01-05
1 50000.00 50000.00 0 0 0
2 50000.00 50000.00 0 0 0
3 50000.00 50000.00 0 0 0
4 50000.00 50000.00 0 0 0
5 50000.00 50000.00 0 0 0
我的table设计如下:
销售:
PCode SaleDate SaleValue
1 2015-01-01 50000
2 2015-01-01 50000
3 2015-01-01 50000
4 2015-01-01 50000
5 2015-01-01 50000
1 2015-01-02 50000
2 2015-01-02 50000
3 2015-01-02 50000
4 2015-01-02 50000
5 2015-01-02 50000
select PCode,SaleDate,SUM(SaleValue) as Sales
from [BSales]
where SaleDate between '2015-01-01' and '2015-01-05'
group by PCode,SaleDate
这部分满足了我的愿望output.But我想输出如下:
PCode '2015-01-01' '2015-01-02' '2015-01-03' '2015-01-04' '2015-01-05'
1 5000 50000 0 0 0
2 5000 50000 0 0 0
3 5000 50000 0 0 0
4 5000 50000 0 0 0
5 5000 50000 0 0 0
是否可以使用 sql 查询?或 T-SQL?或使用存储过程?非常感谢任何人的帮助。
您需要查看 T-SQL 中的主元选项。
例如(未测试!)
SELECT *
FROM BSales
PIVOT(SUM(SaleValue)
FOR SaleDate IN ([2015-01-01], [2015-01-02]
, [2015-01-03], [2015-01-04], [2015-01-05])) AS PVTTable
这里有完整的教程。
http://sqlhints.com/2014/03/10/pivot-and-unpivot-in-sql-server/
这是关键任务:
DECLARE @t TABLE
(
PCode INT ,
SaleDate DATE ,
SaleValue MONEY
)
INSERT INTO @t
VALUES ( 1, '2015-01-01', 50000 ),
( 2, '2015-01-01', 50000 ),
( 3, '2015-01-01', 50000 ),
( 4, '2015-01-01', 50000 ),
( 5, '2015-01-01', 50000 ),
( 1, '2015-01-02', 50000 ),
( 2, '2015-01-02', 50000 ),
( 3, '2015-01-02', 50000 ),
( 4, '2015-01-02', 50000 ),
( 5, '2015-01-02', 50000 )
SELECT PCode ,
ISNULL([2015-01-01], 0) AS [2015-01-01] ,
ISNULL([2015-01-02], 0) AS [2015-01-02] ,
ISNULL([2015-01-03], 0) AS [2015-01-03] ,
ISNULL([2015-01-04], 0) AS [2015-01-04] ,
ISNULL([2015-01-05], 0) AS [2015-01-05]
FROM @t PIVOT( MAX(SaleValue) FOR SaleDate IN ( [2015-01-01], [2015-01-02],
[2015-01-03], [2015-01-04],
[2015-01-05] ) ) p
输出:
PCode 2015-01-01 2015-01-02 2015-01-03 2015-01-04 2015-01-05
1 50000.00 50000.00 0 0 0
2 50000.00 50000.00 0 0 0
3 50000.00 50000.00 0 0 0
4 50000.00 50000.00 0 0 0
5 50000.00 50000.00 0 0 0