用于计算所有条件的SQL Case语句

用于计算所有条件的SQL Case语句,sql,sql-server,Sql,Sql Server,所以,我有一个有趣的问题,我正试图解决,并认为你可以帮助 我有一个大约有100列和100万条记录的表。我每周都会收到一个新的表迭代——我想做的是评估哪些数据在表的一次迭代到另一次迭代中按列进行了更改。请注意,当我得到一个新表时,所有列名都将下注相同,但数据可能不同,也将不同。我的目标是通过newtable.id=oldtable.id上的唯一记录连接,创建一个包含从一次迭代到另一次迭代中更改的所有列的计数表 我的问题是我的案例陈述。有没有办法让case语句在退出之前计算所有when语句并执行所有

所以,我有一个有趣的问题,我正试图解决,并认为你可以帮助

我有一个大约有100列和100万条记录的表。我每周都会收到一个新的表迭代——我想做的是评估哪些数据在表的一次迭代到另一次迭代中按列进行了更改。请注意,当我得到一个新表时,所有列名都将下注相同,但数据可能不同,也将不同。我的目标是通过newtable.id=oldtable.id上的唯一记录连接,创建一个包含从一次迭代到另一次迭代中更改的所有列的计数表

我的问题是我的案例陈述。有没有办法让case语句在退出之前计算所有when语句并执行所有操作?请参阅下面的代码-如何让这个case语句在ColumnTEST下的输出中插入两个更改的值,即我希望看到的TEST_A和TEST_B。我明白,我将不得不使这个动态,并为它做一个游标循环考虑到大量的开销游标采取,一个替代建议将受到欢迎,但我现在的问题在于案件陈述-请帮助我避免大规模的工会声明

谢谢

CREATE TABLE #TEST1 (TEST VARCHAR(100), COLUMNTEST VARCHAR(100), id varchar(10))
CREATE TABLE #TEST2 (TEST VARCHAR(100), COLUMNTEST VARCHAR(100),id varchar(10))
CREATE TABLE #TEST3 (COLUMNTEST VARCHAR(100))

INSERT INTO #TEST1(TEST, COLUMNTEST, ID) VALUES ('100','90','1')
INSERT INTO #TEST2(TEST, COLUMNTEST, ID) VALUES ('1000','900','1')

INSERT INTO #TEST3 (COLUMNTEST)
SELECT CASE 
WHEN  #TEST1.COLUMNTEST <> #TEST2.COLUMNTEST THEN 'TEST_A' 
WHEN #TEST1.TEST <> #TEST2.TEST THEN 'TEST_B' END 

FROM #TEST1 
join #test2 
    ON #TEST1.ID = #TEST2.ID

SELECT * FROM #TEST3

DROP TABLE #TEST1
DROP TABLE #TEST2
DROP TABLE #TEST3

您可以通过连接字符串并将函数用作

INSERT INTO #TEST3 (COLUMNTEST)
SELECT *
FROM STRING_SPLIT((
SELECT CASE 
       WHEN  (#TEST1.COLUMNTEST <> #TEST2.COLUMNTEST AND #TEST1.TEST <> #TEST2.TEST) 
       THEN 'TEST_A,TEST_B'
       WHEN (#TEST1.TEST <> #TEST2.TEST) THEN 'TEST_B' 
       WHEN (#TEST1.COLUMNTEST <> #TEST2.COLUMNTEST) THEN 'TEST_A'
       END
FROM #TEST1 
JOIN #test2 
    ON #TEST1.ID = #TEST2.ID),',')

请注意,STRING_SPLIT函数仅在2016+版本上可用,因此如果您没有SQL Server 2016或2017,您可以创建自己的函数。

这是如何工作的?它只能在一列中放置一个值。只需使用多个大小写表达式,并按照您的意愿将它们连接起来即可?这是一个有趣的函数-我唯一关心的是,我必须为100列创建一个statemennt。。。。还有短一点的路吗?