Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 插入。。选择。。案例-有没有办法得到两列?_Tsql_Insert_Case - Fatal编程技术网

Tsql 插入。。选择。。案例-有没有办法得到两列?

Tsql 插入。。选择。。案例-有没有办法得到两列?,tsql,insert,case,Tsql,Insert,Case,a有一个表,我想在这个表中插入一些东西(非常原始的我;p) 因此,我: INSERT into TARGET_TABLE ([...], tcol1, tcol2) SELECT [...], (SELECT CASE WHEN smth IS NOT NULL THEN SELECT Q_COL1 [...] WHEN smthelse IS NOT NULL THEN SELECT Q_C

a有一个表,我想在这个表中插入一些东西(非常原始的我;p)

因此,我:

INSERT into TARGET_TABLE ([...], tcol1, tcol2)
SELECT [...],
        (SELECT
            CASE
                WHEN smth IS NOT NULL THEN SELECT Q_COL1 [...]
                WHEN smthelse IS NOT NULL THEN SELECT Q_COL1 [from the same table but via different fk and through another tables]
        END)
FROM another_table
而且效果很好

但是

我需要从另一个严格连接到Q_COL1的表中获得另一个值,并且可以使用SELECT Q_COL1部分中的一个简单连接轻松获得该值

但是(选择案例…)应该只返回一个值

Ofc我可以再做一轮,然后再加上一个插页,但我不喜欢——我宁愿只做一次,一个插页

有什么线索吗?:)

编辑: 我知道了

INSERT INTO TARGET_TABLE([...], tcol1, tcol2)
SELECT .... COALESCE(t1c1.val1, t2c1.val1), COALESCE(t1c2.val2, t2c2.val2)
FROM another_table
JOIN table_in_between1..
JOIN table_in_between2..
JOIN table_for_col1 t1c1 ON t1c1.Id=table_in_between1.idt1c1
JOIN table_for_col1 t2c1 ON t2c1.Id=table_in_between2.idt2c1
JOIN table_for_col2 t1c2 ON t1c2.Id = t1c1.id..
JOIN table_for_col2 t2c2 ON t2c2.Id = t2c1.Id...
此外,执行计划现在要好得多(没有流聚合和即时假脱机)


此外,执行计划现在要好得多(没有流聚合和急切的假脱机)。

很高兴您能解决这个问题。您应该添加您的解决方案作为答案,并选择它作为正确的答案。这样,其他人就可以看到你已经得到了答案,而对于任何提出你的问题并寻求类似解决方案的人来说,这将更加清晰。很高兴,但不幸的是,这条信息说“你可以在2天内接受你自己的答案”:(
INSERT INTO TARGET_TABLE([...], tcol1, tcol2)
SELECT .... COALESCE(t1c1.val1, t2c1.val1), COALESCE(t1c2.val2, t2c2.val2)
FROM another_table
JOIN table_in_between1..
JOIN table_in_between2..
JOIN table_for_col1 t1c1 ON t1c1.Id=table_in_between1.idt1c1
JOIN table_for_col1 t2c1 ON t2c1.Id=table_in_between2.idt2c1
JOIN table_for_col2 t1c2 ON t1c2.Id = t1c1.id..
JOIN table_for_col2 t2c2 ON t2c2.Id = t2c1.Id...