2016-07-28 8 views
0

Ich muss die folgende Logik durchführen. Ich habe eine Tabelle mit mehreren Feldern und von dieser Tabelle muss ich prod auswählen, die Gruppe als c hat, aber nicht d. Einige Prods haben Gruppe als c sowie d. Und von den ausgewählten Prods muss ich andere Felder wie Breite, Länge etc. auswählen.Wie bestimmte Datensätze aus einer BigQuery-Tabelle auswählen?

Aus der folgenden Tabelle mit SQL, wie kann ich die markierten Zeilen abrufen?

enter image description here

Antwort

1

Mein Verständnis, dass mit "c" du meintest "ich" und mit "d" du meinst "f"
Unten tut dies.
Es identifiziert die Prod, die in "i" Gruppe sind, aber nicht in "f" Gruppe

SELECT Prod 
FROM (
    SELECT Prod, 
    CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM YourTable 
    GROUP BY Prod 
) 
WHERE list CONTAINS '|i|' 
AND NOT list CONTAINS '|f|' 

Sie können dies mit testen unter

SELECT Prod 
FROM (
    SELECT 
    Prod, 
    CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM 
    (SELECT 'prod1' AS Prod, 'i' AS group), 
    (SELECT 'prod1' AS Prod, 'f' AS group), 
    (SELECT 'prod1' AS Prod, 'f' AS group), 
    (SELECT 'prod2' AS Prod, 'i' AS group), 
    (SELECT 'prod3' AS Prod, 'i' AS group), 
    (SELECT 'prod4' AS Prod, 'i' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    GROUP BY Prod 
) 
WHERE list CONTAINS '|i|' 
AND NOT list CONTAINS '|f|' 

so letzte Abfrage Sie so etwas wie

aussehen kann
SELECT <list of needed fields> 
FROM YourTable 
WHERE Prod IN (
    SELECT Prod 
    FROM (
    SELECT Prod, 
     CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM YourTable 
    GROUP BY Prod 
) 
    WHERE list CONTAINS '|i|' 
    AND NOT list CONTAINS '|f|' 
) 
+0

abouve Abfrage war sehr nützlich bei der Konstruktion, was ich wollte. Vielen Dank – rbkk2016

Verwandte Themen