2013-03-10 43 views
-1

我想要的結果在一個輸出,其中一列是DepositNo,另一個是Doc_Type其中任何Doc_Type等於DocType(反之亦然)相結合的DepositNo的將顯示DocType獲取一列與另一個表的兩列

這裏是我的查詢:

SELECT Doc_Type 
    FROM Doc_Outgoing_Details 
WHERE (Doc_Type <> 67) 
UNION 
SELECT DepositNo, DocType AS Doc_Type 
    FROM Doc_Outgoing 
WHERE (DocType <> 67) 

當我執行它,它說:

UNION必須有相同數目在其目標列表表達式。

+1

你可以發佈更多關於你的表結構?您可能需要加入而不是UNION。 UNION必須返回具有相同名稱的相同數量的列。 – 2013-03-10 11:38:22

+0

您的第一個查詢有一列。第二個有兩個。你不能'聯合'他們 - 工會的每個部分需要有相同的列數。 – Oded 2013-03-10 11:38:36

+0

還有一點是不一致的 - 使用「DocType」或「Doc_Type」,而不是兩者。 – 2013-03-10 13:16:36

回答

1

你在你的第二個table缺少列。 UNION必須有相同數量的columns。這應該工作。

SELECT  O AS DepoSitNo, Doc_Type 
FROM   Doc_Outgoing_Details 
WHERE  (Doc_Type <> 67) 
UNION 
SELECT  DepositNo, DocType AS Doc_Type 
FROM   Doc_Outgoing 
WHERE  (DocType <> 67) 
1

時,您使用的工會,你應與所有列,所以你需要在你的拳頭查詢生成DOC_TYPE列過你的結果集應該有列相同的數字:

SELECT  Doc_Type,0 as Doc_Type // or every value 
             //that you didn't use in real DOCTYPE 
FROM   Doc_Outgoing_Details 
WHERE  (Doc_Type <> 67) 
UNION 
SELECT  DepositNo, DocType AS Doc_Type 
FROM   Doc_Outgoing 
WHERE  (DocType <> 67) 
1

由於列數投射在你的SELECT聲明不符。第一個包含一個列,另一個包含兩個列。嘗試在第一個查詢中添加空值,

SELECT Doc_Type as DepositNo, NULL Doc_Type 
FROM  Doc_Outgoing_Details 
WHERE  Doc_Type <> 67 
UNION 
SELECT DepositNo, DocType AS Doc_Type 
FROM  Doc_Outgoing 
WHERE  DocType <> 67 
+0

是什麼問題?你想了解更多什麼? – 2013-03-12 06:07:16

1

你在找什麼是INNER JOIN

SELECT d.DepositNo, D.Doctype 
FROM Doc_Outgoing d 
INNER JOIN Doc_Outgoing_Details do 
    ON d.Doctype = do.Doc_type 
WHERE (d.DocType <> 67) 
+0

爲什麼給我-1? @Arwa A表示,他只希望將行放在「任何Doc_Type等於DocType(反之亦然)」的地方。 「UNION」如何做到這一點? – JodyT 2013-03-10 11:44:11

相關問題