从两列中的一列获取值

时间:2016-10-10 16:30:05

标签: sql

我有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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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