sql – 选择值为NULL的列名称
发布时间:2021-02-20 04:02:44 所属栏目:MsSql 来源:互联网
导读:好的,4个小时的编码,只有6个小时的搜索…,我没有比我开始时更好.这是我的问题我有一个表(tmp Shell),它有12列.这是一个没有约束的基本表,用于临时报告.当我们插入数据时,我必须提取一个ID号(PatientId)和所有列NAMES,其中该PatientID的值为null. 例: Patient
|
好的,4个小时的编码,只有6个小时的搜索…,我没有比我开始时更好.这是我的问题我有一个表(tmp Shell),它有12列.这是一个没有约束的基本表,用于临时报告.当我们插入数据时,我必须提取一个ID号(PatientId)和所有列NAMES,其中该PatientID的值为null. 例: PatientIdFnameLnameDOB 123455SamNULLNULL 我想回来的是: PatientIdErrorMsg 123455Lname,DOB 当然,如果所有的列都有一个值,那么errormsg将为null. 我尝试并失败了大约300个不同的代码,但这似乎是我能得到的最接近的.不幸的是,这只返回EVERY列,而不是空值.
ALTER PROC [sp_aaShowAllNullColumns]
@tableName VARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(4000);
DECLARE @cols NVARCHAR(4000);
DECLARE @tcols TABLE ( [colbit] NVARCHAR(255) );
--DECLARE @tablename VARCHAR(255) = 'tmpShell';
INSERT @tcols
SELECT
'count(' + [columns].[name] + ') as ' + [columns].[name] + ',' AS [colbit]
FROM
[sys].[columns]
WHERE
[columns].[object_id] = OBJECT_ID(@tableName);
SELECT
@cols = COALESCE(@cols,','') + [@tcols].[colbit]
FROM
@tcols;
SELECT
@cols = SUBSTRING(@cols,1,( LEN(@cols) - 1 ));
SELECT
@cols = ISNULL(@cols,'');
SELECT
@sql = 'select patientid,count(*) as Rows' + @cols + ' from ' + @tableName + ' group by patientid having count(*) > 0';
CREATE TABLE [tmpShell2]
(
[patientid] VARCHAR(15),[Rows] CHAR(2),[Rn] CHAR(2),[patId] CHAR(2),[fname] CHAR(2),[lname] CHAR(2),[dob] CHAR(2),[addr1] CHAR(2),[city] CHAR(2),[state] CHAR(2),[zip] CHAR(2),[country] CHAR(2),[psite] CHAR(2),[csite] CHAR(2),[ssite] CHAR(2),[scode] CHAR(2),[sfid] CHAR(2),[taskid] CHAR(2),[errormsg] CHAR(2)
);
INSERT INTO [tmpShell2]
EXEC [sys].[sp_executesql]
@sql;
DECLARE @tbl VARCHAR(255) = 'tmpShell2';
SELECT DISTINCT
[TS].[patientid],STUFF((
SELECT DISTINCT
',' + [C].[name]
FROM
[tmpShell2] AS [TS2]
JOIN [sys].[columns] AS [C]
ON [C].[object_id] = OBJECT_ID(@tbl)
WHERE
[C].[name] NOT IN ( 'SFID','TaskId','ErrorMsg' )
AND [C].[name] IS NOT NULL
FOR
XML PATH('')
),'')
FROM
[tmpShell2] AS [TS];
DROP TABLE [dbo].[tmpShell2];
END;
GO
EXEC [sp_aaShowAllNullColumns]
'tmpShell';
</pre>
解决方法这样的东西怎么样?SELECT
a.PatientID,CASE a.tmpCol
WHEN '' THEN NULL
ELSE STUFF(a.tmpCol,'')
END AS ErrorMsg
FROM
(
SELECT
PatientID,CASE WHEN FirstName IS NULL THEN ',FirstName' ELSE '' END
+ CASE WHEN LastName IS NULL THEN ',LastName' ELSE '' END
+ CASE WHEN DOB IS NULL THEN ',DOB' ELSE '' END AS tmpCol
FROM
<tableName>
) a; (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
