2017-09-22 7 views
1

人によってグループ化されたSQL Serverの結果があります。そして、SUMSは毎日の数字と毎月の数字です。特定の行のGROUP BY

Person Team Daily Figure Month To Date 
    Tony Team 1   53    635 
    Dan  Team 2   47    172 
    Tom  Team 3   17    232 
    Simon Team 2   16    655 
    Ben  Team 3   17    232 
    Fred Team 2   16    655 

チーム2でこれらの結果をグループ化するにはどうすればよいですか?たとえば、私はまだ他の個々の結果が表示されますが、私は一緒にグループ化するだけのチーム2が欲しいです。

例おかげで UPDATE

Person Team Daily Figure Month To Date 
    Tony Team 1   53    635 
    Tom  Team 3   17    232 
    Ben  Team 3   17    232 
    Team 2 Team 2   79    1482 

結果:

SELECT 

    Person = case when Team = 'Team 2' 
    then 'Team 2' else Person END, 
    Team, 
    SUM(ISNULL(Figure,0)) AS 'Daily Figure', 
    SUM(Month To Date) AS 'Month To Date' 

これは私の選択とそれエラーです

答えて

8

あなたがselectgroup byの両方でPersonためcase表現を使用することができますが:

select 
    case when Team = 'Team 2' then 'Team 2' else Person end as Person 
    , Team 
    , sum([Daily Figure]) as [Daily Figure] 
    , sum([Month To Date]) as [Month To Date] 
from t 
group by 
    case when Team = 'Team 2' then 'Team 2' else Person end 
    , Team 

rextesterデモ:http://rextester.com/XHQ24032

リターン:


あなたがcase表現を繰り返すことを避けるためにcross apply()を使用する場合は

+--------+--------+--------------+---------------+ 
| Person | Team | Daily Figure | Month To Date | 
+--------+--------+--------------+---------------+ 
| Tony | Team 1 |   53 |   635 | 
| Team 2 | Team 2 |   79 |   1482 | 
| Ben | Team 3 |   17 |   232 | 
| Tom | Team 3 |   17 |   232 | 
+--------+--------+--------------+---------------+ 

select 
    x.Person 
    , t.Team 
    , sum(t.[Daily Figure]) as [Daily Figure] 
    , sum(t.[Month To Date]) as [Month To Date] 
from t 
    cross apply (
    select case when t.Team = 'Team 2' then 'Team 2' else t.Person end as Person 
    ) as x 
group by 
    x.Person 
    , t.Team 

またはと:

select 
    x.Person 
    , t.Team 
    , sum(t.[Daily Figure]) as [Daily Figure] 
    , sum(t.[Month To Date]) as [Month To Date] 
from t 
    cross apply (values 
    (case when t.Team = 'Team 2' then 'Team 2' else t.Person end) 
    ) as x (Person) 
group by 
    x.Person 
    , t.Team 
+1

CROSS APPLYは、私は人=ケースチームLIKE「チーム2」を「」チーム2" 他の人のENDを試してみましたが、選択とグループの両方で、これは単にエラー –

+0

そのクエリは少し立派になります –

+0

@RyanGadsdon文字列に二重引用符を使用しないでください。あなたのサンプルデータが 'Team'が整数で、' Team = 2'を使うか、それが文字型だったら 'Team = '2''を使うと' 'Team 2''のように使うのはなぜですか? – SqlZim