SQL PIVOT没有列名的表

时间:2014-04-08 23:01:16

标签: sql pivot unpivot

我在列表中有一个返回值的查询。 例如:

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 个答案:

答案 0 :(得分: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;