【问题标题】:SQL Server - Querying using multiple WHERE statements on the same columnSQL Server - 在同一列上使用多个 WHERE 语句进行查询
【发布时间】:2014-04-12 06:11:05
【问题描述】:

我正在尝试创建一个查询,该查询将在三个时间段内输出客户的购买情况。第一个是 10/01/2010 到 09/31/2011,第二个是 10/01/2011 到 09/31/2012,依此类推。

以下查询返回我想要的数据,但我希望每个日期期间的购买位于同一输出中的单独列中。我可以将每个查询的结果放入 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 等)的单个集合中?

【问题讨论】:

  • 您发布的查询不会产生两个单独的结果。它们是完全相同的结果,只是为 SUMmed 列提供了不同的列别名。我认为您在发布的 SQL 中犯了错误,或者您在 where 语句中犯了错误。 (它们在 WHERE 中都包含相同的确切日期时间值,因此它们将返回相同的值。)
  • 您要执行的操作称为Pivot。如果你谷歌,或者在这里寻找例子,那应该让你开始。如果您知道您只有 3 个静态日期范围,您还可以在三个单独的列中使用 CASE WHEN,这将 SUM 满足条件的值。
  • @KenWhite 更正了第二个查询,谢谢。
  • @Adamwenger 谢谢亚当,我通过研究看到 CASE 可能是解决方案,但找不到适合我特定情况的好例子。将进一步调查。

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的快速回复。结果如下:STR_ID CUST_NO ---------- --------------- --------------------------------------- --------------------------------------- 1 2566036347 7753762.09 7753762.09 10 7065702615 7753762.09 7753762.09 7 2514636378 7753762.09 7753762.09 1 8623527 7753762.09 7753762.09 13 3345148707 7753762.09
  • @TylerSmelley:你可以设置别名。
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2012-01-28
  • 2023-03-08
  • 2021-10-20
相关资源
最近更新 更多