SQL Server 查询以提取物料的唯一数量

6za6bjd0  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一张table:
| 项目|数量|面积|
| - ------|- ------|- ------|
| 1234|十二|美国汽车协会|
| 1234|十一|血脑屏障|
| 1234|十个|CCC|
| 小行星5678|五个|美国汽车协会|
| 小行星4578|十个|美国汽车协会|
| 八五二|八个|美国汽车协会|
| 八五二|九|血脑屏障|
| 八五二|十个|CCC|
预期结果显示仅在AAA区有货,其他区无货
| 项目|数量|面积|
| - ------|- ------|- ------|
| 小行星5678|五个|美国汽车协会|
| 小行星4578|十个|美国汽车协会|
我尝试使用下面的查询,但结果不充分,因为它给予了AAA中的所有项目,而不是我正在寻找的唯一项目

select
  item
  , coalesce(sum(case when area = 'AAA' then qty end ) ,0) as 'AAA'
from MyTable
group by item
bbuxkriu

bbuxkriu1#

也许是这样的。在CASE表达式中,使用“else 0”将避免空值和关于它们被消除的警告消息。

WITH MyTable as (
    SELECT * 
    FROM (
        VALUES
            ('1234', 12, 'AAA'),
            ('1234', 11, 'BBB'),
            ('1234', 10, 'CCC'),
            ('5678', 5, 'AAA'),
            ('4578', 10, 'AAA'),
            ('852', 8, 'AAA'),
            ('852', 9, 'BBB'),
            ('852', 10, 'CCC')
        ) t (item, qty, area) 
)
SELECT item, coalesce(sum(case when area = 'AAA' then qty else 0 end ) ,0) as 'AAA'
from MyTable
group by item 
having count(*) = 1

[编辑]这也行得通,但我认为戴尔的答案更好。

SELECT item, SUM(qty) as 'AAA'
from MyTable
group by item 
having count(*) = 1 AND MIN(area) = 'AAA'
b1payxdu

b1payxdu2#

使用NOT EXISTS检查同一item是否不存在其他area

select item, qty, area
from MyTable mt1
where area = 'AAA'
and not exists (
    select 1
    from MyTable mt2
    where mt2.item = mt1.item and mt2.Area <> 'AAA'
);

相关问题