Sql 显示行中具有空值的列名
我只想显示那些问题(q1、q2、q3、q4…等)值为空的学生id的列名,下面是我想要问题id的表格的打印屏幕。低于预期的o/pSql 显示行中具有空值的列名,sql,sql-server,sql-server-2008,pivot,Sql,Sql Server,Sql Server 2008,Pivot,我只想显示那些问题(q1、q2、q3、q4…等)值为空的学生id的列名,下面是我想要问题id的表格的打印屏幕。低于预期的o/p 您可以使用FOR XML来实现以下结果: 编辑:添加内容以去除前导逗号,并添加其他“”: 我一直在使用aboce case语句,但在161983次之后,我无法看到输出 请公布您的预期结果。是否列出所有问题中为空的学生?或者,如果他们在至少一个问题上为空,您想列出他们吗?很好的解决方案+1.请看我的编辑。如果您愿意,请随意还原。我发现这两个查询都有问题,它只显示了前
您可以使用
FOR XML
来实现以下结果:
编辑:添加
内容
以去除前导逗号,并添加其他“”
:
我一直在使用aboce case语句,但在161983次之后,我无法看到输出
请公布您的预期结果。是否列出所有问题中为空的学生?或者,如果他们在至少一个问题上为空,您想列出他们吗?很好的解决方案+1.请看我的编辑。如果您愿意,请随意还原。我发现这两个查询都有问题,它只显示了前6个问题编号。因此,当我打开表结构时,我发现所有其他列上都有排序规则Latin1_General_CI_AI。由于排序规则的原因,此数据是否未显示?您必须手动为您的表中的问题列数添加条目桌子感谢Wewesthemenance更正语法。
;WITH Cte AS(
SELECT id, name, q = 'q1' FROM Test WHERE q1 IS NULL UNION ALL
SELECT id, name, q = 'q2' FROM Test WHERE q2 IS NULL UNION ALL
SELECT id, name, q = 'q3' FROM Test WHERE q3 IS NULL UNION ALL
SELECT id, name, q = 'q4' FROM Test WHERE q4 IS NULL UNION ALL
SELECT id, name, q = 'q5' FROM Test WHERE q5 IS NULL UNION ALL
SELECT id, name, q = 'q6' FROM Test WHERE q6 IS NULL
)
SELECT
id,
name,
incompletes = STUFF((
SELECT ',' + c2.q
FROM Cte c2
WHERE
c1.id = c2.id
AND c1.name = c2.name
GROUP BY c2.id, c2.name, c2.q
FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
, 1, 1, '')
FROM Cte c1
GROUP BY c1.id, c1.name
ORDER BY c1.id, c1.name
SELECT ID, NAME,
RTRIM ((CASE WHEN Q1 IS NULL THEN 'Q1,' END)||
(CASE WHEN Q2 IS NULL THEN 'Q2,' END)||
(CASE WHEN Q3 IS NULL THEN 'Q3,' END)||
(CASE WHEN Q4 IS NULL THEN 'Q4,' END)||
(CASE WHEN Q5 IS NULL THEN 'Q5,' END)||
(CASE WHEN Q6 IS NULL THEN 'Q6,' END),',') AS NULL_QUESTIONS
FROM TABLE
SELECT ID, NAME,
STUFF (
CASE WHEN Q1 IS NULL THEN ',q1' ELSE '' END +
CASE WHEN Q2 IS NULL THEN ',q2' ELSE '' END +
CASE WHEN Q3 IS NULL THEN ',q3' ELSE '' END +
CASE WHEN Q4 IS NULL THEN ',q4' ELSE '' END +
CASE WHEN Q5 IS NULL THEN ',q5' ELSE '' END +
CASE WHEN Q6 IS NULL THEN ',q6' ELSE '' END
, 1,1,'') AS NULL_QUESTIONS
FROM Test
SELECT Panelist_ID, EmailAddress collate Latin1_General_CI_AI,
STUFF (
CASE WHEN convert (nvarchar (14), PQ_160175) IS NULL THEN ',PQ_160175' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161979) IS NULL THEN ',PQ_161979' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161980) IS NULL THEN ',PQ_161980' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161981) IS NULL THEN ',PQ_161981' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161982) IS NULL THEN ',PQ_161982' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161983) IS NULL THEN ',PQ_161983' ELSE '' END +
CASE WHEN convert (nvarchar (14), PQ_161986) IS NULL THEN ',PQ_161986' ELSE '' END +
CASE WHEN PQ_172469 IS NULL THEN ',PQ_172469' ELSE '' END +
CASE WHEN PQ_180972 IS NULL THEN ',PQ_180972' ELSE '' END +
CASE WHEN PQ_180973 IS NULL THEN ',PQ_180973' ELSE '' END +
CASE WHEN PQ_189924 IS NULL THEN ',PQ_189924' ELSE '' END +
CASE WHEN PQ_195859 IS NULL THEN ',PQ_195859' ELSE '' END +
CASE WHEN PQ_195860 IS NULL THEN ',PQ_195860' ELSE '' END +
CASE WHEN PQ_196605 IS NULL THEN ',PQ_196605' ELSE '' END +
CASE WHEN PQ_196606 IS NULL THEN ',PQ_196606' ELSE '' )