2017-11-09 2 views
0

I Tabelle wie folgt aus:Merge Zeilen in einer durch Spaltenwert ändert

Studenten:

ID|NAME |FOOD |Score 
1 |FRED |Apple|23 
1 |FRED |Pear |50 
2 |HENRY |BERRY|20 
3 |Alex |Apple|40 

Was ich tun möchte, ist die FOOD zu ‚gemischten‘ ändern für alle Schüler essen mehr als 1 verschiedene FOOD. So würde das Ergebnis wie folgt aussehen:

ID|NAME |FOOD |Score 
1 |FRED |MIXED|73 
2 |HENRY |BERRY|20 
3 |Alex |Apple|40 

Irgendwelche Ideen?

Antwort

1

Sie können group by und iif mit count Bedingung verwenden:

select [ID], 
     [NAME], 
     iif(count([FOOD]) > 1, 'MIXED', [FOOD]) as [FOOD], 
     sum([Score]) as [Score] 
from [Students] 
group by [ID], 
     [NAME] 

Sie count(distinct [FOOD]) im Falle verwenden sollten FOOD Einträge für denselben ID und NAME wiederholt werden kann.

+0

Obwohl SQLChao und Grantly's Antworten auch funktionierten. Ich benutzte das und Potashin antwortete zuerst. – SQLserving

1

Verwenden von GROUP BY könnte wollen Sie wollen. Dies ist ein netter kleiner Trick, um zu sehen, wenn 'andere Werte' sind in mehr als eine Zeile

diese

auf Ihren Daten Versuchen
SELECT 
    ID 
    ,NAME 
    ,CASE 
     WHEN MIN(FOOD) <> MAX(FOOD) 
     THEN 'MIXED' ELSE [FOOD] 
    END AS FOOD 
    ,SUM(Score) AS Score 
GROUP BY 
    ID 
    ,NAME 
1

Mögliche Lösung case

DEMO

SELECT 
     id 
     , name 
     , CASE WHEN COUNT(1) > 1 THEN 'MIXED' ELSE MAX(FOOD) END AS Food 
     , SUM(Score) AS Score 
    FROM dbo.students 
    GROUP BY id, name 
    ORDER BY id 
mit
Verwandte Themen