【问题标题】:How to select values where column names are from another table in SQL?如何选择列名来自 SQL 中另一个表的值?
【发布时间】:2020-07-17 06:15:24
【问题描述】:

我有两个表表B有一些表A的列名被分成不同的组,现在我想从A中选择属于B中某个组的数据,如何编写这样的查询?

为了说明

表 A 如下所示

|key|c1|c2|c3|c4|
|p1 |11|21|23|23|
|p2 |10|22|33|21|
|p3 |20|32|53|90|
|p4 |20|42|43|98|

表 B 是这样的

|cloumnName|Group|
|c1|g1|
|c2|g1|
|c3|g2|
|c4|g2|

我知道从B中选择c1 c2是

select columnName from B where Group='g1'

但是,我如何从表 A 中选择数据,其中 key='p1' 并包含上面结果中的列(c1,c2)?喜欢 (p1, 11,21)

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。您所描述的内容似乎需要动态 SQL,这表明您或许应该重新考虑您的应用程序设计。

标签: sql database database-design


【解决方案1】:

你可以做枢轴和加入

 select b.*,a.* from

(select max(case when cloumnName='c1' then [group] end) as c1,
       max(case when cloumnName='c2' then [group] end) as c2,
       max(case when cloumnName='c3' then [group] end) as c3,
      max(case when cloumnName='c4' then [group] end) as c4
     from tableB
) b join tableA a on b.c1=a.c1 and b.c2=a.c2 and b.c3=a.c3 and b.c4=a.c4

【讨论】:

  • 我有很多列怎么样?这似乎不太可行?
  • 那你可以试试动态pivot和join
  • 怎么做?第一次听说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2021-11-06
  • 2012-01-30
  • 2012-05-11
  • 2017-11-13
相关资源
最近更新 更多