我正在尝试创建一个单个查询,该查询将在三个时间段内输出客户的购买。第一个将是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等)?
答案 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