2013-12-13 25 views
0

經過三天的密集Google搜索,嘗試,失敗,討價還價並且生氣。我已經接受了我的命運,並決定問你。我會盡量在這裏儘可能清楚。 。單個字段的Microsoft SQL Server存儲過程

我試圖從數據庫中選擇(通過SP)單場這裏有一些我已經嘗試過的事情:

Subquerywise:

(
    SELECT dbo.T_MemoDetail.Info 
    FROM dbo.T_MemoDetail 
    INNER JOIN dbo.T_DossierDetail AS T_DossierDetail 
      ON T_DossierDetail.MemoGrpId = dbo.T_MemoDetail.MemoGrpId 
     INNER JOIN dbo.T_DossierMain AS T_DossierMain 
      ON T_DossierDetail.DossierCode = T_DossierMain.DossierCode 
    WHERE T_DossierDetail.MemoGrpId = dbo.T_MemoDetail.MemoGrpId AND 
    T_DossierDetail.DossierCode = T_DossierMain.DossierCode AND 
    T_DossierMain.OrdNr = 'BVR13-0710' 
), 

^返回2串

SELECT 
    /*Selects a lot more, but i do not want to paste the whole SP here*/ 
    T_MemoDetail.Info **Note that this isn't a subquery** 
    /*Selecting more data beneath here*/ 
FROM dbo.T_DossierMain 
    INNER JOIN dbo.T_DossierDetail AS t10 
     ON t10.DossierCode = t1.DossierCode 
    INNER JOIN dbo.T_MemoDetail AS T_MemoDetail 
     ON T_MemoDetail.MemoGrpId = t10.MemoGrpId AND 
     t10.DossierCode = t1.DossierCode 

還使用臨時表兩種方式試圖
CREATE TABLE #Temp ....... INSERT INTO SELECT

SELECT ...... INTO #Temp

該死的表之間ONLY聯繫

注意 在表T_DossierDetail是鮮明的唯一價值是DetailCode和DetailSubCode

的組合

如果有人能幫助我■一個,我會這麼greatfull

EDIT 1.1

希望這有助於...對於T_DossierDetail

(可用)值:

MemoGrpId,DossierCode,DetailCode,DetailSubCode 
5468, 015402,010,000 
5469, 015402,020,000 

(可用)的T_DossierMain值:

OrdNr,T_DossierMain.DossierCode 
BVR13-0710, 015402 

(可用)val對於T_DossierMain的UE:

T_MemoDetail.MemoGrpId, T_MemoDetail.Info 
5468, [CompanyName] Logo 
5469, [CompanyName] Logo 

所有值作爲字符串返回,不是int,雙,浮法或任何STRINGS ONLY(出於某種原因),FYI:我只是一個實習生

The "Involves" tables

+0

你有2個相同的值?這可能是你的鏈接有問題,你確定你正確地加入主鍵的所有領域? –

+0

也許你在DossierDetail中有2行沒有'BVR13-0710'。 –

+0

@MatheseF他們不是主鍵,但它們是從一個表連接到另一個表的唯一方式(或者是主鍵?)另外,要返回的字符串值是相同的,但我會看看我是否可以不要更清楚地編輯它BRB –

回答

0

這裏是沒有正確使用的關鍵的一個例子:

declare @table1 table (key1 int, key2 int, value1 int) 
declare @table2 table (key1 int, key2 int, key3 int, value2 int) 

insert into @table1 values (1,1,1) 
insert into @table1 values (1,2,2) 

insert into @table2 values (1,1,1,1) 

select t2.value2 
from @table1 t1 
inner join @table2 t2 on t1.key1 = t2.key1 
where t2.key3 = 1 
0

您有2行,因爲你有2個細節行的檔案。這就是連接的工作方式:它從左表(=檔案詳細信息,2行)獲取所有行,並將其與右表(=主檔案,1行)進行匹配。

你有太多添加新條件,以過濾條件的方式你的數據只保留一列從檔案細節:

SELECT 
     MD.Info 
    FROM dbo.T_MemoDetail MD 
     INNER JOIN dbo.T_DossierDetail DD ON DD.MemoGrpId = MD.MemoGrpId 
     INNER JOIN dbo.T_DossierMain DM ON DD.DossierCode = DM.DossierCode 
    WHERE 
     DM.OrdNr = 'BVR13-0710' 

附:你把兩次加入條件=>這是沒有必要的...

+0

我知道,但我沒有看到任何方式使用'DetailCode'和'DetailSubCode'從' T_DossierDetail' –

+0

@CasNouwens:我不明白你的問題。目前,你要求2行,你得到2行。告訴我們你想實現什麼... –

+0

在報告本身,當我看打印預覽時,它顯示2行(010和020)兩次,所以4行,而應該有2和內部DossierDetail的加入使這一切發生。 –