2014-04-08 103 views
0

我有一個查詢返回列表中的值。 例如:SQL PIVOT一個沒有列名的表

SELECT * 
FROM some_table 
WHERE name IN ('name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name8', 'name9', 'name10') 

我想查看可能不在列表中的內容。 如:

SELECT * 
FROM #list 
WHERE name NOT IN (SELECT name FROM some_table) 

列表有幾百值。 如何將我的列表變成表格?

SELECT 'name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name8', 'name9', 'name10' 

INTO #list UNPIVOT(?????)

+1

我很困惑你的意思是'list'。第一個查詢返回一個表,第二個查詢看起來有效,然後第三個查詢返回一個包含大量列的記錄。究竟發生了什麼? – Brad

+0

您的第一個查詢是您想要排除某些結果的實際查詢嗎?你可以用'WHERE'或'EXCEPT'做到這一點。我認爲我們需要更多信息。 –

+0

基本上我想找到不在表格中的名稱。所以如果'name129'不在some_table中,我不想從查詢中返回它。 – user802599

回答

0
create table SomeTable ( -- The reference table 
    Name varchar(20)); 

insert SomeTable(Name) 
values 
    ('name1') 
    ,('name2') 
    ,('name3') 
    ,('name4') 
    ,('name5'); 


select T1.Name from 
(values     -- The list to compare to the reference table 
    ('name1') 
    ,('name2') 
    ,('name129')) as T1(Name) 
EXCEPT 
select Name from SomeTable; 

因爲該值在列表中,但不是在引用表這將返回 「name129」。使用NOT EXISTS或使用外連接也可以實現同樣的效果。

select T1.Name from 
(values     -- The list to compare to the reference table 
    ('name1') 
    ,('name2') 
    ,('name129')) as T1(Name) 
left outer join SomeTable as st 
    on st.Name = T1.Name 
where st.Name is NULL; 
+0

謝謝我最終做了類似的事情。我試圖做到這一點,而不必更改列表中的每個項目,因爲我不想花費一個小時,並將括號添加到列表中的每個項目。最後,我下載並使用了不同的文本編輯器(sublime)來合成列表,然後像這樣運行代碼。 – user802599

+0

您可以使用SQL作爲SQL生成器 - 'select'('''+ st.Name +'''),'從SomeTable as st'。將輸出複製到選擇的代碼編輯器中。然後在聲明的開頭和結尾處只有一點調整。 –