SQL行输出类似于列
我的桌子设计如下:SQL行输出类似于列,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我的桌子设计如下: 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
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
b销售:
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
这部分满足了我的期望输出。但我希望输出如下:
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中的pivot选项 例如(未测试!) 这里有一个完整的教程
您需要查看T-SQL中的pivot选项 例如(未测试!) 这里有一个完整的教程
您需要查看T-SQL中的pivot选项 例如(未测试!) 这里有一个完整的教程
您需要查看T-SQL中的pivot选项 例如(未测试!) 这里有一个完整的教程 这是一项关键任务:
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
这是一项关键任务:
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
这是一项关键任务:
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
这是一项关键任务:
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