Belirli bir satır belirli bir öğeye sahip olduğunda SQL belirli bir satır sayma

Tablo 1

ID     Name    Category
--------------------------------------
1      WASD     cat1
2      QWER     cat1
3      QWER     cat1
4      WASD     cat2
5      WASD     cat2
6      WASD     cat2

I want to be able to take Name and Category and count how many times cat1 & cat2 are presented within the table. But they both must be corresponding with WASD in the name row.

Örneğin, bununla istediğim çıktı:

Cat1Amount    Cat2Amount
    1             3

Bu çıkışı istiyorum çünkü Cat1 , diğer 2 cat1'in QWER ile birlikte olması nedeniyle yalnızca bir kez görünür. Ve cat2 , 3 kez WASD cat2 'nin yanında 3 kez görünür.

Şu anda bunu Sorgum olarak kullanıyorum:

SELECT 
    Cat1Amount = SUM(CASE WHEN Category='cat1' THEN 1 ELSE 0 END),
    Cat2Amount = SUM(CASE WHEN Category='cat2' THEN 1 ELSE 0 END) 
FROM 
    dbo.Example

Bununla ilgili sorun bana, tabloda cat1 ve cat2 öğelerinin kaç kez göründüğünü gösteriyor; ancak WASD olduğunda her birinin kaç kez göründüğünü göstermiyor. mevcut.

1
SELECT Adı, ... ve GRUP ADI eklemeyi denediniz mi?
katma yazar Salman A, kaynak

5 cevap

Ayrıca yapabilirsiniz

SELECT SUM(CASE WHEN Category = 'cat1' AND Name = 'WASD' THEN 1 ELSE 0 END) Cat1Amount, 
       SUM(CASE WHEN Category = 'cat2' AND Name = 'WASD'  THEN 1 ELSE 0 END) Cat2Amount 
FROM Tbl
1
katma
bu, kod ssas mdx küpü tarafından tüketilinceye kadar gerçek/loş stilden toplama yapmayı tercih ettiğim yöntemdi.
katma yazar junketsu, kaynak

You need where clause & do aggregation :

SELECT SUM(CASE WHEN Category = 'cat1' THEN 1 ELSE 0 END), 
       SUM(CASE WHEN Category = 'cat2' THEN 1 ELSE 0 END) 
FROM dbo.Example e
WHERE Name = 'WASD';
1
katma
Evet bu yaptı, bir ton teşekkürler!
katma yazar Blake, kaynak

Aşağıda dene

SELECT name,count(CASE WHEN Category = 'cat1' THEN 1 end) as cat1amount, 
       count(CASE WHEN Category = 'cat2' THEN 1 END) as cat2amount
FROM dbo.Example e
WHERE Name = 'WASD'
group by name
0
katma
SELECT COUNT(Category)
FROM table_name
WHERE name = 'WASD' category = 'cat1';

SELECT COUNT(Category)
FROM table_name
WHERE name = 'WASD' category = 'cat2';
0
katma
Bu kod soruyu cevaplayabilse de, sorunun nasıl ve/veya niçin çözüldüğü ile ilgili ek bağlamın sağlanması, cevaplamanın uzun vadeli değerini iyileştirecektir.
katma yazar Nic3500, kaynak
Select Category, count(ID) as counted
From Table#1 a
where a.Name = 'WASD'
Group by Category

Sonuç olacaktır:

Kategori sayıldı

kedi1 1

kedi2 3

0
katma