2016-02-12 45 views
3

我正在使用SQL Server 2008 R2。我有一些關於從兩個表中獲取數據的問題。如何從兩個不同的表創建自定義表

我具有低於一個(第一)表示:

enter image description here

在此表中,我已存儲的一組1D爲第二個表。

這這裏是第二個表:

enter image description here

以上圖像是具有主鍵的主表。

現在我想創建一個讀取第一個表中的數據,並檢查定製表,該ID是存在的第二個表或不如果是比我的自定義表應該有關於它的條目。我也想從兩個表中獲取其他記錄以及我的自定義表格。

的任何解決方案,將不勝感激。

+2

「給我了一些解決方案。」這聽起來像一個命令,如果你想要答案,最好要有禮貌! – HoneyBadger

+0

爲什麼ID是逗號分隔值已存儲。真的很反對正常化爲什麼它已存儲在這種方式 – mohan111

+0

是@ mohan111你是正確的,但按規定我必須這樣做。所以我必須繼續這個。 –

回答

2

這裏,我們將使用PARSE名稱中使用ID值,使它們,然後將它們與兩個表進行比較的現有記錄

declare @table1 table (ID varchar(10)) 
insert into @table1(ID) values ('3,4,6'),('1,2,3'),('2,3'),('1,2,3'),('1,2') 

declare @table2 table (ID int) 
insert into @table2(ID) values(1),(2),(3),(4),(5),(6),(7),(8) 

Declare @Custom Table (ID INT) 
;WITH CTE AS (

SELECT 
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'ID' 
FROM 
(
    SELECT 
    CAST ('<M>' + REPLACE([ID], ',', '</M><M>') + '</M>' AS XML) AS Data 
    FROM @table1  
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)) 

INSERT INTO @Custom (ID) 
Select T.ID from @table2 T 
WHERE EXISTS 
(SELECT DISTINCT C.ID 
     FROM CTE C 
    WHERE T.ID = C.ID) 

select * from @Custom 
+0

@ oMV1檢查解決方案,請根據您的要求 – mohan111

+0

是的,它完全給我我想要感謝mohan111,讚賞 –

+0

歡迎很好聽@ 0MV1數據 – mohan111

2

按我的要求,我通過mohan111

了提供答案的基礎上,該解決方案
;WITH CTE AS (
SELECT 
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'ID' 
FROM 
(
    SELECT 
    CAST ('<M>' + REPLACE(Id, ',', '</M><M>') + '</M>' AS XML) AS Data 
    FROM table1 
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)) 

SELECT ColumnName FROM CTE C 
join table2 im on im.Id = c.ID