所以我有一个有趣的问题,我正在尝试解决,并认为您可以提供帮助。
我有一个约有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
答案 0 :(得分:1)
您可以通过连接字符串并使用 STRING_SPLIT()
函数作为
from Z import Z
请注意,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),',')
函数仅在2016+版本中可用,因此如果您没有SQL Server 2016或2017,则可以创建自己的函数。