2016-10-10 55 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