2016-07-27 157 views
0

我需要使用查询来选择一些数据,其中需要显示授权数据,其余数据应该用XXXXXXXX标记,但我需要从表中获取所有数据单个查询。SQL查询根据条件选择不同的选择列表

select empid, orgid, fname, lastname, mname, depid, date 
from employee 
where orgid in (100,200,300,400,500) 

输出应该是这样的:

10 100 3 "dfdf" "dfsdfd" "sdfsdfd" "sdfsdfd" "10/10/2010" 
20 200 4 "dfdf" "dfsdfd" "sdfsdfd" "sdfsdfd" "10/10/2010" 
30 300 5 "dfdf" "dfsdfd" "sdfsdfd" "sdfsdfd" "10/10/2010" 
40 400 6 "dfdf" "dfsdfd" "sdfsdfd" "sdfsdfd" "10/10/2010" 
50 500 7 "dfdf" "dfsdfd" "sdfsdfd" "sdfsdfd" "10/10/2010" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
XX XXXX X "xxxx" "XXXXXX" "XXXXXXX" "XXXXXX" "XXXXXXXXXX" 
+0

MySQL或SQL服务器? – Madhivanan

+0

我在你想要的输出中计数8列,但你的'SELECT'列表只有7列。 –

+0

帮我理解你在这里试图做什么......所以,你想要返回表*的全部内容,但是用'X'来检查所有不符合你的'WHERE'要求的东西? – Siyual

回答

0
select empid, orgid, fname, lastname, mname, depid, date 
from employee 
where orgid in (100,200,300,400,500) 
UNION ALL 
select 0, 0, 'XXXX', 'XXXX', 'XXXX', 0, '1900-01-01' 
from employee 
where orgid NOT in (100,200,300,400,500) 

上述查询应该做的工作。但是,如果您在结果集中具有'xx ...'的特殊性,则需要将结果集转换为varchar(nn)。

下面是一个例子(当然,你需要更换的字段和表名)

SELECT CAST(CourseId AS VARCHAR(20)), Title, CAST(Credits AS VARCHAR(20)), 
CAST(DepartmentID AS VARCHAR(20)), CONVERT(VARCHAR(20), GetDate(),101) 
FROM Course 
WHERE DepartmentID IN (1, 2) 
UNION ALL 
SELECT 'xx', 'XXXX', 'xxx', 'xxxx', 'XXXXXX' FROM Course 
WHERE DepartmentID NOT IN (1, 2)