2014-01-28 31 views
-1

我有一個查詢讀取代碼的描述。 兩個查詢單獨運行他們返回一行,但結合它提供了一個更加複製row.Below被查詢當兩個表連接時出現重複行

SELECT source, description = IsNull(Max(RTRIM(LTRIM(description))), 'UNKNOWN') 
    FROM SOURCES where source = RTRIM(LTRIM('SCDGIFT12')) 
GROUP BY source 

SELECT UPPER(SOURCECODE) as SOURCECODE,ISNULL(COUNT(ORDER_ID),0) AS ORDID 
    FROM SRC_CODE 
WHERE CODE = 'SCDGIFT12' AND ORDER_DATE BETWEEN CONVERT(DATETIME,'10/01/2013')  
    AND CONVERT(DATETIME,'01/26/2014') 
GROUP BY sourcecode 

SELECT SOURCECODE,ORDID,DESCRIPTION 
    FROM (SELECT UPPER(SOURCECODE) as SOURCECODE, ISNULL(COUNT(ORDER_ID),0) AS ORDID)  
      FROM SRC_CODE 
      WHERE SOURCECODE = 'SCDGIFT12' and ORDER_DATE BETWEEN CONVERT(DATETIME,'10/01/2013') AND CONVERT(DATETIME,'01/26/2014')AND (UPPER(SOURCECODE) IS NOT NULL) 
      GROUP BY UPPER(SOURCECODE)) AS T LEFT JOIN ( 
       SELECT source, description = IsNull(Max(RTRIM(LTRIM(description))), 'UNKNOWN') from SOURCES group by source) as B ON RTRIM(LTRIM(T.SOURCECODE)) = RTRIM(LTRIM(B.SOURCE)) 
    ORDER BY sourcecode 

回答

0

我甚至不知道從哪裏開始回答這個問題。

  • 你的問題是不正確的,你沒有加入兩個表。您將加入兩個不同的結果集。
  • 在前2條語句中,只有兩列,但在最後一條語句中有3列。
  • 你的代碼是無效的,有幾個語法錯誤在編譯之前需要被糾正。你的括號裏有錯誤的地方。
  • 我甚至不確定你加入的是什麼。
  • 加入和計數時,你應該把蘋果和橙子放在橙子裏,不要試圖把它們分開計算,然後把它們放在一起,並期望它們都是相同的。

這裏是你的代碼格式化,括號移動到正確位置,「我希望」

SELECT SOURCECODE 
    ,ORDID 
    ,DESCRIPTION 
FROM (SELECT UPPER(SOURCECODE) AS SOURCECODE 
      ,ISNULL(COUNT(ORDER_ID), 0) AS ORDID 
     FROM SRC_CODE 
     WHERE SOURCECODE = 'SCDGIFT12' 
      AND ORDER_DATE BETWEEN CONVERT(DATETIME, '10/01/2013') 
          AND  CONVERT(DATETIME, '01/26/2014') 
      AND (UPPER(SOURCECODE) IS NOT NULL) 
     GROUP BY UPPER(SOURCECODE)) AS T 
LEFT JOIN (SELECT source 
        ,description = ISNULL(MAX(RTRIM(LTRIM(description))), 'UNKNOWN') 
       FROM SOURCES 
       GROUP BY source) AS B 
    ON RTRIM(LTRIM(T.SOURCECODE)) = RTRIM(LTRIM(B.SOURCE)) 
ORDER BY sourcecode 

我不知道你甚至想這個做的,但如果你想要的是得到擺脫重複你可以把DISTINCT消除重複的行,但這並不能解決你的根本問題。你需要弄清楚你想要計算的是什麼,並找出更好的方式來把它放在一起,而不是加入子查詢。

相關問題