SQL - 是否有执行此操作的命令?

标签 sql sql-server-2005 crosstab

我有一个表格,当前是一长串设备和有关它们何时售出的信息。我需要拿一张看起来像这样的 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/

相关文章:

sql - 遇到 SQL 错误 : ORA-01843: not a valid month

mysql - 具有差异条件的多重计数?

sql - 如何将时间戳插入postgreSQL数据库

c# - 存储过程上的 OdbcCommand - 输出参数出现 "Parameter not supplied"错误

sql-server - Entity Framework 4 是否可以与 SQL Server 2005 一起使用?

python - Pandas 如何在没有聚合的情况下创建简单的交叉表?

crystal-reports - 在Crystal报表中启用交叉表的增长

sql - 多个表的左外连接

SQL Server - 需要 SQL 查询来识别/突出显示审核表中的特定更改

postgresql 交叉表简单例子