首先引入語句來源,表結構和數據如下:
需求是:查出員工(personname)在不同店鋪(store)的總薪酬(salary),相同店鋪輸出store,不同店鋪輸出multi_store。
正確查詢語句如下:
SELECT personname,(case when count(distinct Store)>1 then 'multi_store' else MAX ( store) end),sum(Salary) FROM dbo.StaffInformation
GROUP BY PersonName
第一想到的語句:(但是達不到想要的結果或者直接報錯:“選擇列表中的列'列名'無效,因為該列沒有包含在聚合函數或group by 子句中”)
SELECT personname,(case when count(distinct Store)>1 then 'multi_store' else store end),sum(Salary) FROM dbo.StaffInformation
GROUP BY PersonName
遇到類似的問題:首先看看輸出的字段是不是你需要的,如果需要但是又不能放在group by中(因為放在group by中就得不到分組的效果,但是不放就報錯)
就要考慮將store這樣的字段用個函數處理下。其實想想挺簡單的,多遇到點問題 就能慢慢得到自己的一套解決問題的方案了。
有問題可以隨時評論。我基本上每天都會來一下。有問題互相探討,學習,進步。