Як зрабіць падлік SQL канкрэтнай радкі, калі іншая канкрэтнай радок мае пэўны элемент

Табліца № 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.

Напрыклад, выхад я хачу з гэтым:

Cat1Amount    Cat2Amount
    1             3

Я хачу, каб гэтая выснова, так як Cat1 з'яўляецца толькі адзін раз з-за адной 2 Cat1 ў быць побач з QWER . І cat2 з'яўляецца ў 3 разы WASD знаходзіцца побач з CAT2 3 разы.

Я ў цяперашні час выкарыстоўваю гэта як мой запыт:

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

Праблема з гэтым ён паказвае мне, колькі разоў cat1 і cat2 з'яўляюцца ў табліцы, але не тое, колькі разоў кожны з іх з'яўляюцца, калі WASD прысутнічае.

1
Вы паспрабуйце дадаць SELECT Name, ... і GROUP BY Name ?
дададзена аўтар Salman A, крыніца

5 адказы

Вы можаце таксама зрабіць

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
дададзена
гэта мой пераважны спосаб рабіць агрэгаты выключэння факту/цьмяны стылю да код былі паглынутая SSAS MDX куб.
дададзена аўтар junketsu, крыніца

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
дададзена
Ды гэта зрабіў, дзякуй за тону!
дададзена аўтар Blake, крыніца

паспрабуйце ніжэй

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
дададзена
SELECT COUNT(Category)
FROM table_name
WHERE name = 'WASD' category = 'cat1';

SELECT COUNT(Category)
FROM table_name
WHERE name = 'WASD' category = 'cat2';
0
дададзена
У той час як гэты код можа адказаць на пытанне, забяспечваючы дадатковы кантэкст адносна таго, як і/або чаму ён вырашае праблему дазволіць палепшыць доўгатэрміновую каштоўнасць адказу на выклік ст.
дададзена аўтар Nic3500, крыніца
Select Category, count(ID) as counted
From Table#1 a
where a.Name = 'WASD'
Group by Category

Вынік будзе:

катэгорыя падлічвалі

cat1 1

cat2 3

0
дададзена