我有一个表格,当前是一长串设备和有关它们何时售出的信息。我需要拿一张看起来像这样的 table :
Item | Time Sold
--------------------
A 05/2010
B 04/2010
C 03/2010
A 04/2010
A 05/2010
然后有一个表格,其中项目作为第一列,日期计数作为列标题,如下所示:
Item | Count_03/2010 | Count_04/2010 | Count_05/2010
-------------------------------------------------------------
A | 0 | 1 | 2
B | 0 | 1 | 0
C | 1 | 0 | 0
有没有简单的方法来做到这一点?我知道在其他语言中只有一个命令可以执行此操作,想知道 SQL 是否有一个命令。
编辑
我的问题是有多个表,在某些表中月份可能与其他表中的不同。有没有办法通过列出变量然后使用这些变量在代码中创建列来编写一个适用于所有这些变量的脚本?如果我知道月份总是相同的话,我会写一个,但由于它们是可变的,有没有办法做到这一点。
最佳答案
SQL Server 2005 及更高版本有一个叫做 pivot
的东西,但它仍然不是一个命令,您需要知道 Time sold 列中的值。您可以使用 Itzik Ben-Gan 在他的 Inside Microsoft SQL Server 2008: T-SQL Querying 中演示的动态枢轴方法。书
例子
create table #test (Item char(1), TimeSold varchar(20))
insert #test values('A','05/2010')
insert #test values('B','04/2010')
insert #test values('C','03/2010')
insert #test values('A','04/2010')
insert #test values('A','05/2010')
SELECT *
FROM
(SELECT Item,TimeSold
FROM #test) AS pivTemp
PIVOT
( COUNT(TimeSold)
FOR TimeSold IN ([05/2010],[04/2010],[03/2010])
) AS pivTable
关于SQL - 是否有执行此操作的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512358/