2017-01-19 393 views
0

以下のコードは、次の例外をスローします。これをどうすれば解決できますか?SQL Server 2008指定列が複数回指定されました

メッセージ8156、レベル16、状態1、行17
列 'idが' 'QISproduct' の複数回指定されました。

クエリ:

SELECT 
    g.artcode 
    , sum(g.aantal) 
    , i.class_01 
    , i.Isstockitem 
FROM 
    gbkmut AS g 
INNER JOIN 
    items AS i ON i.itemcode = g.artcode 
INNER JOIN 
    (SELECT 
     QISP.id 
     , QISprocess.nml 
     , QISeventlog.id 
     , QISeventlog.dtsample 
     , QISproduct.nms 
     , QISbatchlog.nm 
     , QIStestlog.idvariable 
     , QIStestlog.no 
     , QISshortnote.ds 
     , gewicht = CASE QIStestlog.IDvariable 
         WHEN '139' 
          THEN QIStestlog.no 
        END 
     , aantal = CASE QIStestlog.IDvariable 
         WHEN '234' 
          THEN QIStestlog.no 
        END 
     , siloleeg = CASE QIStestlog.idvariable 
         WHEN '23' 
          THEN CASE QIStestlog.no 
            WHEN '10' 
             THEN 'Ja' 
             ELSE 'Nee' 
           END 
         END 
     , QISvariable.nml 
     , gl.nm 
     , QISprocess.id 
    FROM 
     QIC.Vobra_new2.dbo.production AS QISP 
    INNER JOIN 
     QIC.Vobra_new2.dbo.process AS QISprocess ON QISP.idprocess = QISProcess.id 
    INNER JOIN 
     QIC.Vobra_new2.dbo.product AS QISproduct ON QISP.idproduct = QISproduct.id 
    INNER JOIN 
     QIC.Vobra_new2.dbo.batchlog AS QISbatchlog ON QISP.idbatch = QISbatchlog.id 
    INNER JOIN 
     QIC.Vobra_new2.dbo.eventlog AS QISeventlog ON QISeventlog.idproduction = QISP.id 
                AND QISeventlog.idbatch = QISbatchlog.id 
    INNER JOIN 
     QIC.Vobra_new2.dbo.testlog AS QIStestlog ON QIStestlog.idevent = QISeventlog.id 
    LEFT OUTER JOIN 
     QIC.Vobra_new2.dbo.shortnote AS QISshortnote ON QISshortnote.id = QIStestlog.no 
                 AND QIStestlog.idvariable = '144' 
    INNER JOIN 
     QIC.Vobra_new2.dbo.variable AS QISvariable ON QISvariable.id = QIStestlog.idvariable 
    LEFT OUTER JOIN 
     QIC.Vobra_new2.dbo.vvarxproc AS vvp ON vvp.idvariable = QISvariable.id 
              AND vvp.idprocess = QISP.idprocess 
    LEFT OUTER JOIN 
     QIC.Vobra_new2.dbo.attribute AS QISattribute ON QISattribute.id = vvp.idattribute 
    LEFT OUTER JOIN 
     QIC.Vobra_new2.dbo.grade AS QISgrade ON QISgrade.id = QISattribute.idgrade 
    LEFT OUTER JOIN 
     QIC.Vobra_new2.dbo.gradelevel AS gl ON gl.idgrade = QISattribute.idgrade 
              AND gl.nlevel = QIStestlog.no 
    WHERE 
     QISbatchlog.nm NOT LIKE 'V%' 
     AND QISP.dtstart > '2017-01-01' 
     AND QISP.dtstart < '2017-01-19' 
     AND QISP.idprocess IN ('12', '13', '14', '15', '16', '17', '18', '41') 
     AND QIStestlog.idvariable IN ('234', '139', '128') 
    ) QISproduct ON g.artcode = QISproduct.nms 
WHERE 
    g.bkjrcode > '2015' 
    AND g.reknr IN (3000, 3010, 3020) 
    AND g.aantal > 0 
    AND g.warehouse IN ('1', '9') 
    AND g.datum >= '2017-01-01' 
    AND g.oorsprong = 'R' 
    AND g.kstplcode <> 'VPR' 
GROUP BY 
    g.artcode, i.Class_01, i.IsStockItem 
+0

このクエリはCTEの一部ですか?またはストアドプロシージャですか? –

答えて

0

QISProductにエイリアス計算照会2つのテーブル、すなわちQISEventLogとQISProcessからID列を含みます。これらの列の名前を別の名前に変更します。クエリ

 SELECT g.artcode 
      ,sum(g.aantal) 
      ,i.class_01 
      ,i.Isstockitem 
     FROM gbkmut AS g 
     INNER JOIN items AS i ON i.itemcode = g.artcode 
     INNER JOIN (
      SELECT QISP.id 
       ,QISprocess.nml AS Processnml 
       ,QISeventlog.id AS EventLogId 
       ,QISeventlog.dtsample 
       ,QISproduct.nms 
       ,QISbatchlog.nm AS batchnm 
       ,QIStestlog.idvariable 
       ,QIStestlog.no 
       ,QISshortnote.ds 
       ,gewicht = CASE QIStestlog.IDvariable 
        WHEN '139' 
         THEN QIStestlog.no 
        END 
       ,aantal = CASE QIStestlog.IDvariable 
        WHEN '234' 
         THEN QIStestlog.no 
        END 
       ,siloleeg = CASE QIStestlog.idvariable 
        WHEN '23' 
         THEN CASE QIStestlog.no 
           WHEN '10' 
            THEN 'Ja' 
           ELSE 'Nee' 
           END 
        END 
       ,QISvariable.nml variablenml 
       ,gl.nm AS glnm 
       ,QISprocess.id AS ProcessId 
      FROM QIC.Vobra_new2.dbo.production AS QISP 
      INNER JOIN QIC.Vobra_new2.dbo.process AS QISprocess ON QISP.idprocess = QISProcess.id 
      INNER JOIN QIC.Vobra_new2.dbo.product AS QISproduct ON QISP.idproduct = QISproduct.id 
      INNER JOIN QIC.Vobra_new2.dbo.batchlog AS QISbatchlog ON QISP.idbatch = QISbatchlog.id 
      INNER JOIN QIC.Vobra_new2.dbo.eventlog AS QISeventlog ON QISeventlog.idproduction = QISP.id 
       AND QISeventlog.idbatch = QISbatchlog.id 
      INNER JOIN QIC.Vobra_new2.dbo.testlog AS QIStestlog ON QIStestlog.idevent = QISeventlog.id 
      LEFT JOIN QIC.Vobra_new2.dbo.shortnote AS QISshortnote ON QISshortnote.id = QIStestlog.no 
       AND QIStestlog.idvariable = '144' 
      INNER JOIN QIC.Vobra_new2.dbo.variable AS QISvariable ON QISvariable.id = QIStestlog.idvariable 
      LEFT JOIN QIC.Vobra_new2.dbo.vvarxproc AS vvp ON vvp.idvariable = QISvariable.id 
       AND vvp.idprocess = QISP.idprocess 
      LEFT JOIN QIC.Vobra_new2.dbo.attribute AS QISattribute ON QISattribute.id = vvp.idattribute 
      LEFT JOIN QIC.Vobra_new2.dbo.grade AS QISgrade ON QISgrade.id = QISattribute.idgrade 
      LEFT JOIN QIC.Vobra_new2.dbo.gradelevel AS gl ON gl.idgrade = QISattribute.idgrade 
       AND gl.nlevel = QIStestlog.no 
      WHERE QISbatchlog.nm NOT LIKE 'V%' 
       AND QISP.dtstart > '2017-01-01' 
       AND QISP.dtstart < '2017-01-19' 
       AND QISP.idprocess IN (
        '12' 
        ,'13' 
        ,'14' 
        ,'15' 
        ,'16' 
        ,'17' 
        ,'18' 
        ,'41' 
        ) 
       AND QIStestlog.idvariable IN (
        '234' 
        ,'139' 
        ,'128' 
        ) 
      ) QISproduct ON g.artcode = QISproduct.nms 
     WHERE g.bkjrcode > '2015' 
      AND g.reknr IN (
       3000 
       ,3010 
       ,3020 
       ) 
      AND g.aantal > 0 
      AND g.warehouse IN (
       '1' 
       ,'9' 
       ) 
      AND g.datum >= '2017-01-01' 
      AND g.oorsprong = 'R' 
      AND g.kstplcode <> 'VPR' 
     GROUP BY g.artcode 
      ,i.Class_01 
      ,i.IsStockItem 
+0

Thx、それは動作します(しかし、おそらくあなたは既にそれを知っていました:-)) –

0

を更新し、QISbatchlog.nm そして は、gl.nm はあなたがで複数の問題を持って、colum名 を変更するとあなたが追加することができます col1の

0

としてgl.nmを同じ列名を持ちますあなたの質問。内側のクエリで、同じ列名を持つ次の列を設定しています。内部クエリでASエイリアスを使用して一意の名前を使用します。

QISP.id 
QISeventlog.id 
QISprocess.id 

gl.nm 
QISbatchlog.nm 

QISprocess.nml 
QISvariable.nml 

sqlのselectリストによって一意の列名を返すことが必須です。

関連する問題