【问题标题】:SQL Group by using different conditions and multiple columnsSQL Group 通过使用不同的条件和多列
【发布时间】:2021-01-27 20:46:55
【问题描述】:

我有一个地址表,列是:A,B,C,D......地址、号码、州、城市、邮编**

我需要获取可以按 2 个不同条件分组的不同地址的计数:

(地址、号码、州、市) 或者 (地址、号码、邮编)

这 2 个条件的原因是 Zip 在某些情况下可以为空,并且提供了 City 和 State,反之亦然。 但是,在所有 3 个都存在的情况下,最终表格应该只有 1 行用于该地址

select State, City, Address, Number
into T1
from Main Table
group by State, City, Address, Number

select Zip, Address, Number
into T2
from Main Table
group by Zip, Address, Number

select a.*, b.Zip into JoinT1T2 from T1 a inner join T2 b 
on a.Address=b.Address AND a.Number=b.Number 

select count(*) from JoinT1T2

但这并没有给我想要的结果。

【问题讨论】:

  • 1) 向我们展示一些示例数据和预期结果。 2) 向我们展示您的尝试 - SO 不是代码编写服务。 3) 请检查您现有的问题并接受一些答案或评论,说明为什么它们不能解决您的问题,因为这是本网站的预期礼仪。
  • 向我们展示一些示例数据和预期结果!
  • 您需要满足某些条件的“决赛桌”还是需要计数?这是两个不同的结果。
  • @Fred 我需要决赛桌的人数。

标签: sql sql-server group-by


【解决方案1】:

您可以创建一个名为 TypeOfDir 的新字段,使用 CASE 指令为您拥有的不同条件获取一个从 1 到 3 的值。 然后您可以按该新字段进行分组。

【讨论】:

  • 我不确定我是否理解。我们只有两个条件。
  • 您描述了三种情况:No Zip but City/State、No City/State but Zip、Both Zip and City/State。
  • 就像 Fred 说的,你具备这三个条件。
【解决方案2】:

您需要做的是将条件定义为额外的列。您无需将其添加到表中(尽管它会提高性能),如果您愿意,可以使用 CROSS APPLY 即时执行此操作。

SELECT COUNT(*) FROM (
    SELECT DISTINCT HasZip, State, City, Zip, Address, Number
    FROM Table t
    CROSS APPLY (VALUES (CASE WHEN Zip IS NULL THEN 0 ELSE 1 END) ) v(HasZip)
) t

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2021-01-11
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多