2013-10-22 95 views
1

我想查詢一些信息並將其顯示在一行上。我擁有的是我的客戶的稅務信息。我希望返回公司名稱和州申請數量以及我們爲他們提供的縣級申請數量。我得到一個錯誤,要求我在我的組中包含'描述'和'tcode',但是當我這樣做時,我只能得到1作爲計數。我也得到了幾行信息,它結束了這樣的顯示我可以在一行上返回這個sql查詢嗎?

co StateFilingCount LocalFilingCount 
Co NULL NULL 
Co NULL 1 
Co 1 NULL 


SELECT DISTINCT CT.co, 
CASE WHEN description LIKE '%SITW' THEN COUNT(tcode) END AS StateFilingCount, 
CASE WHEN tcode LIKE '__-%' THEN COUNT(tcode) END AS LocalFilingCount FROM CTax CT 
WHERE tcode NOT LIKE 'ss-%' AND CT.endDate > GETDATE() 
GROUP BY CT.co 
ORDER BY CT.co ASC 

回答

0

這將是一個SQL小提琴更容易,但我會帶一個鏡頭:

SELECT 
    CT.co, 
    COUNT(CASE WHEN description LIKE '%SITW' THEN tcode END) AS StateFilingCount, 
    COUNT(CASE WHEN tcode LIKE '__-%' THEN tcode END) AS LocalFilingCount 
FROM CTax CT 
WHERE tcode NOT LIKE 'ss-%' AND CT.endDate > GETDATE() 
GROUP BY CT.co 
ORDER BY CT.co ASC 

我會嘗試移動COUNTCASE語句外。你應該能夠擺脫DISTINCT,因爲你在做GROUP BY

+0

這真棒謝謝你! – BSanders

+0

很高興我能幫到你。請注意,如果這個答案在功能上等同於@ DStanley的回答,那麼它只是利用了'CASE'將在'WHEN'條件不滿足時返回NULL,'COUNT'忽略NULL值的事實。 – rsbarro

0

我想你想要一個子組數。做到這一點的方法之一是:

SELECT DISTINCT CT.co, 
SUM(CASE WHEN description LIKE '%SITW' THEN 1 ELSE 0 END) AS StateFilingCount, 
SUM(CASE WHEN tcode LIKE '__-%' THEN 1 ELSE 0 END) AS LocalFilingCount 
FROM CTax CT 
WHERE tcode NOT LIKE 'ss-%' 
    AND CT.endDate > GETDATE() 
GROUP BY CT.co 
ORDER BY CT.co ASC 
+0

這個作品也謝謝你! – BSanders

相關問題