比较 SQL Server 中一个表中的列名与另一表中的列数据

佐勒菲卡尔·多尔卡瓦拉

我试图将作为列值的一部分存在的tblFactorDefinition列名与具有实际值的匹配列名进行比较,tblConstituent以找出这两个表之间的差异。

即使确实存在差异,我也没有得到预期的输出。我在下面发布了带有预期输出的数据库架构和示例数据:

下面的三个表是tblFactorDefinitiontblConstituenttblFamily

FamilyID | FieldName  |  FactorDefinition  |  PropertyTypeID
---------+------------+--------------------+----------------
10216    |  Factor1   |  901               |  300
10216    |  Factor2   |  901               |  305
10216    |  Factor3   |  901               |  310


ConstituentID | FamilyID |  ListingID | Factor1 | Factor2 | Factor3 | Factor9
--------------+----------+------------+---------+---------+---------+---------
1101          | 10216    |    1       |  0.1    | NULL    |  0.5    |   1.0
1105          | 10216    |    2       |  0.1    | 0.3     |  0.5    |   1.0
1108          | 10216    |    5       |  0.45   | 0.42    |  NULL   |   1.0


FamilyID | OpenDate
---------+------------
10216    | 2016-05-16

预期输出如下所示:

FamilyID  |  FieldName   |  ConstituentID
----------+--------------+---------------
10216     |   Factor2    |  1101
10216     |   Factor3    |  1108

这是查询,我没有得到正确的逻辑,因此它什么都不返回。

SELECT
    T.FamilyID,
    C.COLUMN_NAME,
    T.ConstituentID
FROM 
    SolaDBServer..tblConstituent T
INNER JOIN 
    INFORMATION_SCHEMA.COLUMNS C ON T.FamilyID = C.COLUMN_NAME 
                                 AND C.TABLE_NAME = 'tblFactorDefinition'  
                                 AND T.FamilyID = 10216
LEFT OUTER JOIN 
    SolaDBServer..tblConstituent tc ON tc.FamilyID = T.FamilyID 
INNER JOIN 
    SolaDBServer..tblFamily tf ON tf.FamilyID = tc.FamilyID  
                               AND tf.OpenDate = CAST(GETDATE() AS DATE)
WHERE 
    C.COLUMN_NAME = 'FieldName'

对此有任何帮助吗?

谢谢。

Gen Wan

您可以使用UNPIVOT

请注意我在查询中使用了IIF函数。(需要SQL Server 2012或以上版本)

如果您使用旧版本,请使用 case 语句替换它们。

试试这个:

select a.FamilyID,a.FieldName,a.ConstituentID from 
(
select FamilyID,FieldName, ConstituentID, indicator
from 
(select c.ConstituentID,c.FamilyID
,iif(factor1 is null,1,0) as Factor1  --indicator for null
,iif(factor2 is null,1,0) as Factor2
,iif(factor3 is null,1,0) as Factor3
,iif(factor9 is null,1,0) as Factor9
from tblConstituent c
join tblFamily f
on f.FamilyID = c.FamilyID
where f.OpenDate = cast (getdate() as date)
)p
unpivot
(Indicator for FieldName
 in ([Factor1],[Factor2],[Factor3],[Factor9])
 ) as unpvt    
) a
join tblFactorDefinition b  --check if their factor(s) exist for specific ID
on a.FamilyID = b.FamilyID
and a.FieldName = b.FieldName 
where a.Indicator = 1

测试结果(我用不同的 FamilyID 又添加了一行):

数据库<>小提琴

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL Server中将一列从一个表复制到另一表

来自分类Dev

根据位置将一个表的列安排为Microsoft SQL Server中另一表中的行

来自分类Dev

sql server比较一张表中的行

来自分类Dev

比较SQL Server中同一表的列

来自分类Dev

SQL Server:比较两列

来自分类Dev

删除重复的数据并加载到SQL Server中的另一个表中

来自分类Dev

SQL将属性与同一表中另一行的属性进行比较

来自分类Dev

SQL Server:如何从另一表的列的行中减去一列的行

来自分类Dev

将同一表中的一列中的值更新为SQL Server中的另一列

来自分类Dev

比较同一表中的两行SQL

来自分类Dev

SQL:将一个表中的2列合并以与另一表中的1列进行比较

来自分类Dev

显示两列,但其中一列与SQL Server中另一个表中的另一列合并

来自分类Dev

SQL Server数据集比较

来自分类Dev

SQL Server 2008比较同一数据库中的两个表,并更改get列

来自分类Dev

将表的每一行与SQL Server 2008中的另一表进行比较

来自分类Dev

sql server比较一张表中的行

来自分类Dev

比较SQL Server中的多行

来自分类Dev

如何使用SQL Server解析表中一列中的数据并将结果放入另一列中?

来自分类Dev

比较SQL Server中同一表的列

来自分类Dev

SQL Server比较同一表的两行的值,并获取不匹配的列名

来自分类Dev

SQL比较同一表中的两列,并在另一表中更新

来自分类Dev

SQL将属性与同一表中另一行的属性进行比较

来自分类Dev

比较2个大表(SQL Server)

来自分类Dev

如何检索 SQL Server 中一个表的任何字段中不存在的数据?

来自分类Dev

SQL 查询将两列与另一表中的一列进行比较(并获得两个值)

来自分类Dev

比较表的记录并在sql server中过滤它们的数据

来自分类Dev

将一个表中的行集合连接到另一个表的列 - SQL Server

来自分类Dev

在 SQL Server 中另一个表的段落中的列中搜索术语

来自分类Dev

SQL Server:查询以从另一个表中获取表数据(计数)作为 VIEW

Related 相关文章

  1. 1

    如何在SQL Server中将一列从一个表复制到另一表

  2. 2

    根据位置将一个表的列安排为Microsoft SQL Server中另一表中的行

  3. 3

    sql server比较一张表中的行

  4. 4

    比较SQL Server中同一表的列

  5. 5

    SQL Server:比较两列

  6. 6

    删除重复的数据并加载到SQL Server中的另一个表中

  7. 7

    SQL将属性与同一表中另一行的属性进行比较

  8. 8

    SQL Server:如何从另一表的列的行中减去一列的行

  9. 9

    将同一表中的一列中的值更新为SQL Server中的另一列

  10. 10

    比较同一表中的两行SQL

  11. 11

    SQL:将一个表中的2列合并以与另一表中的1列进行比较

  12. 12

    显示两列,但其中一列与SQL Server中另一个表中的另一列合并

  13. 13

    SQL Server数据集比较

  14. 14

    SQL Server 2008比较同一数据库中的两个表,并更改get列

  15. 15

    将表的每一行与SQL Server 2008中的另一表进行比较

  16. 16

    sql server比较一张表中的行

  17. 17

    比较SQL Server中的多行

  18. 18

    如何使用SQL Server解析表中一列中的数据并将结果放入另一列中?

  19. 19

    比较SQL Server中同一表的列

  20. 20

    SQL Server比较同一表的两行的值,并获取不匹配的列名

  21. 21

    SQL比较同一表中的两列,并在另一表中更新

  22. 22

    SQL将属性与同一表中另一行的属性进行比较

  23. 23

    比较2个大表(SQL Server)

  24. 24

    如何检索 SQL Server 中一个表的任何字段中不存在的数据?

  25. 25

    SQL 查询将两列与另一表中的一列进行比较(并获得两个值)

  26. 26

    比较表的记录并在sql server中过滤它们的数据

  27. 27

    将一个表中的行集合连接到另一个表的列 - SQL Server

  28. 28

    在 SQL Server 中另一个表的段落中的列中搜索术语

  29. 29

    SQL Server:查询以从另一个表中获取表数据(计数)作为 VIEW

热门标签

归档