sql - 如果条件适用则获取行否则单行

标签 sql sql-server tsql

我有一个案例,我有 2 个表,CustomersTransactions .

很多客户可以组成一个客户群(记录在Customers表中)。我需要显示 Customers如果该组的所有客户都具有特定条件(数字列 xCol <> 5 ),则单行中的某些总和(即每组)。如果其中任何一个(又名至少一个)有 xCol = 5 , 我需要显示所有客户而不是组。

客户表

Customer    Group       Customer Code
ALPHA   GROUP A     1
BETA    GROUP A     2
GAMMA   GROUP A     3
DELTA   GROUP B     4
LAMDA   GROUP B     5

交易表

Customer Code   xCol    Amount
1                   1   4
2                   1   4
3                   1   4
4                   5   1
5                   2   2

在上述情况下,我需要显示这些:

Customer    Group       Amount
-----           GROUP A     12
DELTA           GROUP B     1
LAMDA           GROUP B     2

提前致谢

最佳答案

尝试:

with cte as
(select c.*,
        t.Amount,
        max(case xCol when 5 then 1 end) over (partition by c.[Group]) xCol5
 from customers c
 left join transactions t on c.[Customer Code] = t.[Customer Code])
select case xCol5 when 1 then [Customer Code] end [Customer Code],
       [Group],
       sum(Amount) Amount
from cte
group by [Group], case xCol5 when 1 then [Customer Code] end

关于sql - 如果条件适用则获取行否则单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428026/

相关文章:

c# - 将数组值写入 SQL 数据库

sql - 为什么 count(case date) 也计算空情况?

java - 关系数据库(H2、Java): How do I constrain a foreign key to NOT match another foreign key in the same table?

mysql - T-SQL (transact-SQL) 在 SQLite 和其他 SQL 数据库中有效吗?

sql - 丢失空值,使用where过滤sql查询结果

sql - 选择同一表关系 SQL Server 中的所有父项或子项

mysql - SQL 内连接表

c# - SQL 查询通知在横向扩展设置中并不总是有效 (SQL Server)

sql - 如何选择 TOP x 但仍获得整个查询的 COUNT?

sql-server - 如何限制SQL Server Developer版本为Standard版本?