2017-07-11 6 views
-3

Kann jemand bitte erklären, was diese Abfrage tatsächlich tut?SQL-Abfrage in SQL Server

SELECT 
    u.business_id, 
    u.name, 
    u.cusine, 
    MAX(u.values1) 
FROM 
    SOURCE_DATA u 
UNPIVOT 
    (values1 FOR cusine IN (Sandwiches, Pizza, Bars, Food, Mexican, Thai, Indian)) u 
WHERE 
    u.values1 = 1 
GROUP BY 
    u.business_id, u.name, u.cusine 
ORDER BY 
    u.name 
+3

Verwenden Sie MySQL oder MS SQL Server? Markieren Sie keine nicht betroffenen Produkte. – jarlh

+2

[MySQL] (https://dev.mysql.com/doc/refman/5.7/en/) und [SQL Server] (https://docs.microsoft.com/en-us/sql/t-sql/ Sprachreferenz) sind verschiedene Softwarepakete, die von verschiedenen Firmen produziert werden. Selbst wenn beide SQL implementieren, erweitern sie es auf verschiedene Arten und verwenden manchmal unterschiedliche Syntaxkonventionen, die die Abfragen zwischen ihnen inkompatibel machen. Bitte verwenden Sie die richtigen Tags. – axiac

+0

Ich vermute, dass die Abfrage einen Syntaxfehler generiert. –

Antwort

0

basierend auf der Abfrage es wie jedes der Felder sieht, Sandwiches, Pizza usw. enthalten entweder eine 1 oder 0

Unpivot jedes der Felder nimmt aufgeführt und wandelt sie in zwei Felder, Küche (ein Textfeld) und values1. Jedes der ursprünglichen Felder wird zu einer Zeile. Nicht aufgeführte Felder werden einfach kopiert.

Die Gruppe wird dies nehmen und wiederkehr alle Kombinationen von business_id, Namen und Küche aus dem ursprünglichen Datum, wo das Feld mit einer 1 ist

Kurzversion markiert wurde, dass jeder für business_id und Namen es eine Liste bekommen von jeder Küche markiert mit einer 1 in seinem ursprünglichen Feld. ZB wenn Pizza eine 1 hätte, würde sie eine Reihe für Pizza zurückgeben.