SQL Server - 在同一列上使用多个WHERE语句进行查询

时间:2014-03-09 03:49:39

标签: sql sql-server sql-server-2008-r2 pivot

我正在尝试创建一个单个查询,该查询将在三个时间段内输出客户的购买。第一个将是2010年10月1日至2011年9月31日,第二个将是2011年10月1日至2012年9月31日等。

以下查询返回我想要的数据,但我希望每个日期的购买都在同一输出的单独列中。我可以将每个查询的结果放入Excel并在CUST_NO上执行VLOOKUP来合并数据,但我确信有一个更优雅的解决方案。

2010查询:

SELECT     STR_ID, CUST_NO, SUM(TOT) AS Expr2010
FROM       PS_TKT_HIST
WHERE      (BUS_DAT BETWEEN CONVERT(DATETIME, '2010-10-01 00:00:00', 102) AND CONVERT(DATETIME, '2011-09-31 00:00:00', 102))
GROUP BY STR_ID, CUST_NO

2011年查询

SELECT     STR_ID, CUST_NO, SUM(TOT) AS Expr2011
FROM       PS_TKT_HIST
WHERE      (BUS_DAT BETWEEN CONVERT(DATETIME, '2011-10-01 00:00:00', 102) AND CONVERT(DATETIME, '2012-09-31 00:00:00', 102))
GROUP BY STR_ID, CUST_NO

这给了我两个不同的结果。

如何将两个查询中的WHERE子句组合到一个查询中,该查询将结果生成为具有单独列的单个集合(Expr2010,Expr2011等)?

1 个答案:

答案 0 :(得分:0)

我认为这不是解决问题的最佳方法。但只是向你提供你可以这样做的想法..

SELECT     STR_ID, CUST_NO, 
(SELECT    SUM(TOT) AS Expr2010
FROM       PS_TKT_HIST
WHERE      (BUS_DAT BETWEEN CONVERT(DATETIME, '2010-10-01 00:00:00', 102) AND CONVERT(DATETIME, '2011-09-31 00:00:00', 102))
) As Expr2010,
(
SELECT     SUM(TOT) AS Expr2011
FROM       PS_TKT_HIST
WHERE      (BUS_DAT BETWEEN CONVERT(DATETIME, '2010-10-01 00:00:00', 102) AND CONVERT(DATETIME, '2011-09-31 00:00:00', 102))
) As Expr2011
from PS_TKT_HIST