基于列值的其他表中的SQL SELECT数据

萨拉瓦南

大师,我有一个像下面的桌子

Id Name Source Value
1   a      Dx   C
2   b      Rx   G
3   C      Tx   H

我还有其他3个表,例如T1,T2和T3,其结构如下。基于父表中的“源”列,我需要获取“数据列”并显示为结果。如果多个记录匹配,则所有记录都以逗号分隔

T1

Id       Data
Dx        123
DX        011  
T2

Id       Data
Rx        456
Rx       022  

T3

Id       Data
Tx        789     

我需要像T-SQL中的输出

Id Name Source Value Data
1   a      Dx   C     123,011
2   b      Rx   G     456 ,022
3   C      Tx   H     789

当没有成功时,我尝试了Case。需要输入

乔基·纳库里(Giorgi Nakeuri)

试试这个:

DECLARE @t TABLE(ID INT, Name CHAR(1), Source CHAR(2), Value CHAR(1))
DECLARE @t1 TABLE(ID CHAR(2), Data NVARCHAR(20))
DECLARE @t2 TABLE(ID CHAR(2), Data NVARCHAR(20))
DECLARE @t3 TABLE(ID CHAR(2), Data NVARCHAR(20))

INSERT INTO @t VALUES
(1, 'a', 'Dx', 'C'),
(2, 'b', 'Rx', 'G'),
(3, 'c', 'Tx', 'H')

INSERT INTO @t1 VALUES('Dx', '1231')
INSERT INTO @t1 VALUES('Dx', '1232')
INSERT INTO @t1 VALUES('Dx', '1233')
INSERT INTO @t2 VALUES('Rx', '4561')
INSERT INTO @t2 VALUES('Rx', '4562')
INSERT INTO @t3 VALUES('Tx', '789')


SELECT  t.ID ,
        t.Name ,
        t.Source ,
        t.Value ,
        COALESCE(c1.Data1, c2.Data2, c3.Data3) AS Data
FROM @t t
OUTER APPLY (SELECT STUFF((SELECT ',' + Data 
             FROM @t1 t1 WHERE t.Source = t1.ID
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'') AS Data1) c1
OUTER APPLY (SELECT STUFF((SELECT ',' + Data 
             FROM @t2 t2 WHERE t.Source = t2.ID
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'') AS Data2) c2
OUTER APPLY (SELECT STUFF((SELECT ',' + Data 
            FROM @t3 t3 WHERE t.Source = t3.ID
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') AS Data3) c3   

输出:

ID  Name    Source  Value   Data
1   a       Dx      C       1231,1232,1233
2   b       Rx      G       4561,4562
3   c       Tx      H       789

带有CASE表达式的版本

SELECT  t.ID ,
        t.Name ,
        t.Source ,
        t.Value ,
        o.Data
FROM    @t t
        OUTER APPLY ( SELECT    CASE t.Source
                                  WHEN 'Dx' THEN STUFF((SELECT
                                                              ',' + Data
                                                        FROM  @t1 t1
                                                        WHERE t.Source = t1.ID
                                       FOR             XML PATH('') ,
                                                           TYPE
            ).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
                                  WHEN 'Rx' THEN STUFF((SELECT
                                                              ',' + Data
                                                        FROM  @t2 t2
                                                        WHERE t.Source = t2.ID
                                       FOR             XML PATH('') ,
                                                           TYPE
            ).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
                                  WHEN 'Tx' THEN STUFF((SELECT
                                                              ',' + Data
                                                        FROM  @t3 t3
                                                        WHERE t.Source = t3.ID
                                       FOR             XML PATH('') ,
                                                           TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
                                END AS DATA
                    ) o

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL SELECT-返回用其他表中的值填充的新列

来自分类Dev

数据框中的匹配列基于其他数据框中的列中的值

来自分类Dev

基于多个数据库和表的ER图,这些数据库和表从其他表的列值中获取名称

来自分类Dev

SQL SELECT:具有基于其他列的值的新列

来自分类Dev

如何在Pandas数据框中的其他列中填充基于新列的值

来自分类Dev

基于多个其他列的条件式替换数据框列中的值-R

来自分类Dev

基于Pandas数据框中其他列的值范围的列总和

来自分类Dev

SQL查询基于其他列值对数据进行排序

来自分类Dev

如何基于列值创建其他行或数据框

来自分类Dev

基于其他数据库mysql从表中删除

来自分类Dev

基于主键从其他列中的数据创建新列

来自分类Dev

基于其他列条件和其他列计算的数据框新列值

来自分类Dev

基于列中的某些值,更新另一个数据帧熊猫中的其他列

来自分类Dev

如何获得最大 基于数据帧中其他列的值,每一行的n周期值?

来自分类Dev

如何在Pandas方法链表达式中基于其他列的值替换数据子集中的值

来自分类Dev

SQL查询-查找值并同时从其他表中获取数据

来自分类Dev

Laravel-从数据透视表中获取其他列值

来自分类Dev

使用SQL Server 2008中的select语句和其他列插入表

来自分类Dev

使用select语句插入表并在SQL Server 2008中添加其他列

来自分类Dev

更新Laravel 5中的其他数据透视表值

来自分类Dev

SQL中连续重复列数据的其他列值的总和

来自分类Dev

将sql数据透视表与其他表中的列连接时出现重复数据

来自分类Dev

用于基于R中其他数据帧值填充数据帧值的创意循环

来自分类Dev

使用具有基于其他列的值的临时列进行SELECT

来自分类Dev

使用具有基于其他列的值的临时列进行SELECT

来自分类Dev

R中序列数据的数据转换:连接一列基于其他列的数据

来自分类Dev

从其他表在SQL Server中插入数据

来自分类Dev

其他表中的SQL Server数据透视表列

来自分类Dev

基于其他数据框中的列,在数据框中执行Spark Deduplicate列

Related 相关文章

  1. 1

    SQL SELECT-返回用其他表中的值填充的新列

  2. 2

    数据框中的匹配列基于其他数据框中的列中的值

  3. 3

    基于多个数据库和表的ER图,这些数据库和表从其他表的列值中获取名称

  4. 4

    SQL SELECT:具有基于其他列的值的新列

  5. 5

    如何在Pandas数据框中的其他列中填充基于新列的值

  6. 6

    基于多个其他列的条件式替换数据框列中的值-R

  7. 7

    基于Pandas数据框中其他列的值范围的列总和

  8. 8

    SQL查询基于其他列值对数据进行排序

  9. 9

    如何基于列值创建其他行或数据框

  10. 10

    基于其他数据库mysql从表中删除

  11. 11

    基于主键从其他列中的数据创建新列

  12. 12

    基于其他列条件和其他列计算的数据框新列值

  13. 13

    基于列中的某些值,更新另一个数据帧熊猫中的其他列

  14. 14

    如何获得最大 基于数据帧中其他列的值,每一行的n周期值?

  15. 15

    如何在Pandas方法链表达式中基于其他列的值替换数据子集中的值

  16. 16

    SQL查询-查找值并同时从其他表中获取数据

  17. 17

    Laravel-从数据透视表中获取其他列值

  18. 18

    使用SQL Server 2008中的select语句和其他列插入表

  19. 19

    使用select语句插入表并在SQL Server 2008中添加其他列

  20. 20

    更新Laravel 5中的其他数据透视表值

  21. 21

    SQL中连续重复列数据的其他列值的总和

  22. 22

    将sql数据透视表与其他表中的列连接时出现重复数据

  23. 23

    用于基于R中其他数据帧值填充数据帧值的创意循环

  24. 24

    使用具有基于其他列的值的临时列进行SELECT

  25. 25

    使用具有基于其他列的值的临时列进行SELECT

  26. 26

    R中序列数据的数据转换:连接一列基于其他列的数据

  27. 27

    从其他表在SQL Server中插入数据

  28. 28

    其他表中的SQL Server数据透视表列

  29. 29

    基于其他数据框中的列,在数据框中执行Spark Deduplicate列

热门标签

归档