Как объединить этот запрос SQL Server? - PullRequest
1 голос
/ 31 мая 2019

У меня есть этот запрос

select count(*) as COUNT_A, datepart(yyyy, [Tgl_Perolehan]) as [year]
from [table_name] 
where Sertifikat_Nomor IS NOT NULL
group by datepart(yyyy, [Tgl_Perolehan])

и это

select count(*) as COUNT_B, datepart(yyyy, [Tgl_Perolehan]) as [year]
from [table_name] 
where Sertifikat_Nomor IS NULL
group by datepart(yyyy, [Tgl_Perolehan])

Разница составляет всего IS NOT NULL и IS NULL, а результат равен

+---------+--------+ | COUNT_A | year | +----------+--------+ | 12 | 1991 | | 15 | 1993 | | 24 | 1998 | +----------+--------+

Я хочу сделать вот так

+---------+---------+--------+ | COUNT_A | COUNT_B | year | +----------+---------+--------+ | 12 | 23 | 1991 | | 15 | 33 | 1993 | | 24 | 13 | 1998 | +----------+---------+--------+

и попробую вот так

select (select count(*) as COUNT_A, datepart(yyyy, [Tgl_Perolehan]) as [year] 
from [table_name]
where Sertifikat_Nomor IS NOT NULL
group by datepart(yyyy, [Tgl_Perolehan])), 
(select count(*) as COUNT_B, datepart(yyyy, [Tgl_Perolehan]) as [year]
from [table_name] 
where Sertifikat_Nomor IS NULL
group by datepart(yyyy, [Tgl_Perolehan]))

Но не решил мою проблему.Я использовал CASE WHEN, но все еще не решил проблему.Как объединить и исправить их?Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Попробуйте это, используя связанный подзапрос

SELECT   Datepart(yyyy, o.[Tgl_Perolehan]) AS [Tgl_Perolehan] , 
         ( 
                SELECT Count(*) 
                FROM   [table_name] i 
                WHERE  i.<somid> = o.<somid> 
                AND    i.sertifikat_nomor  IS NOT NULL ) AS AS count_a , 
         ( 
                SELECT count(*) 
                FROM   [table_name] ii 
                WHERE  ii.<somid> = o.<somid> 
                AND    ii.sertifikat_nomor IS NULL) AS AS count_b 
FROM     [table_name] o 
GROUP BY datepart(yyyy,o.[Tgl_Perolehan])
0 голосов
/ 31 мая 2019

Попробуйте это-

SELECT
SUM(CASE WHEN ertifikat_Nomor IS NOT NULL THEN 1 ELSE 0 END) AS COUNT_A,
SUM(CASE WHEN Sertifikat_Nomor IS NULL THEN 1 ELSE 0 END)AS COUNT_B,
DATEPART(yyyy, [Tgl_Perolehan]) AS [year]
FROM[table_name] 
GROUP BY DATEPART(yyyy, [Tgl_Perolehan])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...