2014-10-04 125 views
0

我試圖從位於同一臺服務器上的兩個數據庫中進行查詢。第一個數據庫查詢與JOIN和UNION子句有點複雜,但加入其他數據庫非常簡單。我在最後一行代碼上一直收到錯誤 - SITE_ID_NUMBER在同一臺服務器上連接多個數據庫SQL Server

我從來沒有嘗試過這一點 - 任何線索,我可能做錯了什麼?附加說明 - 數據庫的JOIN子句由一個本地列組成 - 即「6041」和一個計算結果 - 我必須使用SUBSTRING並添加6以獲得匹配值。

更新 - 一些變化之後,我居然遇到了錯誤:

Msg 8156, Level 16, State 1, Line 32
The column 'RECORD_DATE_TIME' was specified multiple times for 'P'.

謝謝。

SELECT P.[6] + SUBSTRING(A.SHIP_TO,6,3) AS 'STORE' , 
     S.SITE_ID_NUMBER, 
     S.DM, 
     S.AREA, 
     S.STORE_NAME, 
     S.LOCATION, 
     P.WHSE AS 'DIVISION_DESC', 
     P.ORDER_STATUS, 
     P.MATERIAL, 
     P.DESCRIPTION, 
     P.PO_NUMBER AS 'CUSTOMER_PO_NUMBER', 
     P.ORDER_QUANTITY AS'QTY', 
     P.RSHIP_DATE AS 'REQUESTED_SHIP_DATE', 
     S.TRANSIT_6040_6041 

FROM 

(SELECT * 

FROM PDX_SAP_USER.dbo.VW_ADIDAS_RETAIL_aRI A 
JOIN PDX_SAP_USER.dbo.VW_WB_DELIVERIES D 
ON A.DELIVERY_NUMBER = D.DELIVERY_NUMBER 

UNION ALL 

SELECT * 

FROM PDX_SAP_USER.dbo.VW_ADIDAS_RETAIL_aRO A 
JOIN PDX_SAP_USER.dbo.VW_WB_DELIVERIES D 
ON  A.DELIVERY_NUMBER = D.DELIVERY_NUMBER) P 

JOIN [ADI_USER.MAINTAINED].dbo.SiteDataAdiRbk S 

ON S.SITE_ID_NUMBER = P.STORE; 
+1

你實際上有一個名爲「6」的列? – Aheho 2014-10-05 00:38:00

+1

_Never_使用'SELECT *',因爲它會導致這些令人困惑的錯誤。總是專門列出列,尤其是使用'UNION'時。如果你專門列出你的專欄,你可能會發現你的問題。該問題可能在您上次查詢中。我建議你通過運行查詢的一些部分來做一些更詳細的故障排除,然後發回更具體的東西。 – 2014-10-05 01:33:07

回答

1

Msg 8156, Level 16, State 1, Line 32 The column 'RECORD_DATE_TIME' was specified multiple times for 'P'. RECORD_DATE_TIME在您提供的查詢中不存在。無論如何,錯誤很明顯。我會告訴你一個簡單的例子,重現你的錯誤。使用這個例子來修復你的代碼。

CREATE TABLE [dbo].[t1](
    [id] [int] NULL, 
    [name] [nchar](10) NULL 
) ON [PRIMARY] 

如圖所示加入表格以獲得此錯誤。

select * 
from 
(
select * 
from t1 inner join t1 as t2 on t1.id = t2.id 
) as t 

Msg 8156, Level 16, State 1, Line 6 
The column 'id' was specified multiple times for 't'. 
1

在最外層,你有接近2表別名:

  • ,P:這是結果從子查詢中設置與聯盟
  • S:這對錶的別名[ADI_USER.MAINTAINED] .dbo.SiteDataAdiRbk

您選擇列表中的第一項是P. [6] + SUBSTRING(一個 .SHIP_TO,6,3)AS '商店'

你引用一個命名錶或別名,這是不可訪問。

0

謝謝大家的回覆和好主意。在一些需要專注於其他項目之後,突然間,我的答案突然出現了,而且似乎到目前爲止還在工作。儘管如此,我不會在那裏注入想法。我的目標是加入一個在我們的工作區用戶維護文件夾中創建的表格,在該文件夾中,我已經讀取/寫入了傳遞信息的數據庫,並且通過這樣做,因爲我在下面工作 - 我會說我需要進一步挖掘帳戶因爲有兩個可能的地點,但是這比我們現在的要好得多,甚至新的分析師都能夠在報告網站上投放併發布。

SELECT AD.STORE, 
     S.DM, 
     S.AREA, 
     S.STORE_NAME, 
     S.LOCATION, 
     AD.DIVISION_DESC, 
     AD.ORDER_STATUS, 
     AD.MATERIAL, 
     AD.DESCRIPTION, 
     AD.CUSTOMER_PO_NUMBER, 
     AD.QTY, 
     AD.REQUESTED_SHIP_DATE, 
     S.TRANSIT_6040_6041, 
     AD.REQUESTED_SHIP_DATE + S.TRANSIT_6040_6041 AS'ESTIMATED_ESTIMATED_DELIVERY_DATE' 


FROM 

(

SELECT '6' + SUBSTRING(A.SHIP_TO,6,3) AS 'STORE', 
     '' AS 'DM', 
     '' AS 'AREA', 
     '' AS 'STORE_NAME', 
     '' AS 'LOCATION', 
     A.WHSE AS 'DIVISION_DESC', 
     A.ORDER_STATUS, 
     D.MATERIAL, 
     D.DESCRIPTION, 
     A.PO_NUMBER AS 'CUSTOMER_PO_NUMBER', 
     D.ORDER_QUANTITY AS'QTY', 
     A.RSHIP_DATE AS 'REQUESTED_SHIP_DATE', 
     '' AS 'TRANSIT', 
     '' AS 'ESTIMATED_DELIVERY_DATE' 


FROM VW_ADIDAS_RETAIL_aRI A 
JOIN VW_WB_DELIVERIES D 
ON A.DELIVERY_NUMBER = D.DELIVERY_NUMBER 

GROUP BY A.SHIP_TO, 
     A.WHSE, 
     A.ORDER_STATUS, 
     A.PO_NUMBER, 
     D.MATERIAL, 
     D.DESCRIPTION, 
     D.ORDER_QUANTITY, 
     A.RSHIP_DATE, 
     A.ASHIP_DATE 

HAVING A.ORDER_STATUS NOT IN ('shp') 

UNION ALL 

SELECT '6' + SUBSTRING(A.SHIP_TO,6,3) AS 'STORE', 
     '' AS 'DM', 
     '' AS 'AREA', 
     '' AS 'STORE_NAME', 
     '' AS 'LOCATION', 
     A.WHSE AS 'DIVISION_DESC', 
     A.ORDER_STATUS, 
     D.MATERIAL, 
     D.DESCRIPTION, 
     A.PO_NUMBER AS 'CUSTOMER_PO_NUMBER', 
     D.ORDER_QUANTITY AS'QTY', 
     A.RSHIP_DATE AS 'REQUESTED_SHIP_DATE', 
     '' AS 'TRANSIT', 
     '' AS 'ESTIMATED_DELIVERY_DATE' 

FROM VW_ADIDAS_RETAIL_aRO A 
JOIN VW_WB_DELIVERIES D 
ON  A.DELIVERY_NUMBER = D.DELIVERY_NUMBER 

GROUP BY A.SHIP_TO, 
     A.WHSE, 
     A.ORDER_STATUS, 
     A.PO_NUMBER, 
     D.MATERIAL, 
     D.DESCRIPTION, 
     D.ORDER_QUANTITY, 
     A.RSHIP_DATE, 
     A.ASHIP_DATE 

HAVING A.ORDER_STATUS NOT IN ('shp')) AD 

JOIN [ADI_USER_MAINTAINED].dbo.SiteDataAdiRbk S 

ON AD.STORE = S.SITE_ID_NUMBER; 
相關問題