2016-10-10 15 views
0

值我有3個表:獲取兩列

tArtikelAttribut

kArtikelAttribut | kArtikel | kAttribut 
--------------------------------------- 
    97974  |  33 | 117 
    97975  |  33 | 122 

tArtikelAttributSprache

kArtikelAttribut | cWertVarchar 
------------------------------- 
    97974  | black 
    97975  | bla 

tAttributSprache

kAttribut | cName 
------------------  
    117 | Farbe 
    122 | Saison 

我的SQL:

SELECT 
    tArtikelAttribut.kArtikel, 
    tArtikelAttributSprache.cWertVarchar AS Farbe, 
    tArtikelAttributSprache.cWertVarchar AS Saison 
FROM 
    (tArtikelAttributSprache 
INNER JOIN 
    tArtikelAttribut ON tArtikelAttributSprache.kArtikelAttribut = tArtikelAttribut.kArtikelAttribut) 
INNER JOIN 
    tAttributSprache ON tArtikelAttribut.kAttribut = tAttributSprache.kAttribut 
GROUP BY 
    tArtikelAttribut.kArtikel, tArtikelAttributSprache.cWertVarchar, 
    tArtikelAttributSprache.cWertVarchar, tAttributSprache.cName 
HAVING 
    (((tAttributSprache.cName) = "Farbe" OR 
     (tAttributSprache.cName) = "Saison")); 

輸出

kArtikel | Farbe | Saison 
------------------------- 
    33 | black | black 
    33 | bla | bla 

我需要這個

kArtikel | Farbe | Saison 
------------------------- 
    33 | black | bla 

我遺憾的是沒有解決的辦法

+2

哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出它! –

+0

你的例子是無效的(標準)SQL,所以你告訴我們你正在使用哪個DBMS是很重要的。 –

回答

0

如果你看一下你的代碼像:

SELECT 
    a.kArtikel, 
    aas.cWertVarchar, 
    cName 
FROM 
    tArtikelAttribut a INNER JOIN 
    tArtikelAttributSprache aas ON 
    aa.kArtikelAttribut = aas.kArtikelAttribut INNER JOIN 
    (SELECT 
     kAttribut, 
     cName 
    FROM 
     tAttributSprache 
    WHERE 
     s.cName IN("Farbe" ,"Saison")) s ON 
    a.kAttribut = s.kAttribut 

您的結果將是:

kArtikelAttribut | kArtikel | kAttribut | cWertVarchar | cName 
------------------------------------------------------------------------- 
    97974  |  33 | 117    | black | Farbe 
    97975  |  33 | 122    | bla  | Saison 

所以,如果你想您發佈的結果,你必須轉動超過CNAME和選擇MAX(cWertVarchar)

0

感謝

 
SELECT * 
FROM (
SELECT 
    a.kArtikel AS Identnummer, 
    aas.cWertVarchar, 
    cName 
FROM 
    tArtikelAttribut a INNER JOIN 
    tArtikelAttributSprache aas ON 
    a.kArtikelAttribut = aas.kArtikelAttribut INNER JOIN 
    (SELECT 
     kAttribut, 
     cName 
    FROM 
     tAttributSprache 
    WHERE 
     cName IN ('Farbe' ,'Saison')) s ON 
    a.kAttribut = s.kAttribut 
) AS s 
PIVOT 
(
MAX(cWertVarchar) FOR cName IN (Farbe ,Saison) 
) AS pvt