我有一张名为 Table1
的表,见下文
PRODUCT CUSTOMER COMP
DICE DAVES PET SHOP Billed
DICE CLAXTONS ToT
CARDS VIEWSONIC NITS
CARDS NORTHERN LIGHTS Billed
CARDS NORTHERN LIGHTS NITS
BOX TABLEAU Billed
BOX TABLEAU ToT
有些值在 CUSTOMER
字段中存在重复项,但如果它是重复项,它将始终在至少一个 Billed
部分中包含 COMP
,因此我希望结果查询仅返回 COMP
中的值,其中它是 Billed
的重复项,因此结果表看起来像
PRODUCT CUSTOMER COMP
DICE DAVES PET SHOP Billed
DICE CLAXTONS ToT
CARDS VIEWSONIC NITS
CARDS NORTHERN LIGHTS Billed
BOX TABLEAU Billed
这是我试过的 SQL
SELECT *
FROM Table1
WHERE COMP = 'Billed'
UNION ALL
SELECT Table1_A.PRODUCT, Table1_A.CUSTOMER, Table1_A.COMP
FROM Table1 Table1_A
LEFT JOIN (
SELECT *
FROM Table1
WHERE COMP != 'Billed'
) Table1_B ON Table1_B.PRODUCT = Table1_A.PRODUCT
AND Table1_B.CUSTOMER = Table1_A.CUSTOMER
我想如果我输入一个 UNION
并引用等于 Billed
而不等于 Billed
,那么它会保留我正在寻找的格式,但它只是重复每一个 CUSTOMER
对于每一个 COMP
答案 0 :(得分:1)
您可以为规则使用聚合:
SELECT PRODUCT, CUSTOMER,
(CASE WHEN COUNT(*) = 1 THEN MAX(COMP) ELSE 'Billed' END)
FROM table1
GROUP BY PRODUCT, CUSTOMER;
您也可以使用 UNION ALL
方法:
select product, customer, comp
from table1 t1
where comp = 'Billed'
union all
select product, customer, comp
from table1 t1
where not exists (select 1
from table1 tt1
where tt1.product = t1.product and
tt1.customer = t1.customer and
tt1.comp = 'Billed'
);