【问题标题】:SQL Query From Same Table using external Table value使用外部表值从同一表查询 SQL
【发布时间】:2020-11-14 15:15:46
【问题描述】:

我使用的是 SQL Server 2012。我在同一个表中的 SQL Server 数据库中有数据,需要将其放入多个列中。

我有两张桌子,tblIVContent:

TBLIVTextData:

为了让记录显示在TBLIVTextData 中,当在我们的 UI 中创建数据时,它会在 module_id 上创建一个 Content_id 等于 84。

我需要自动在 TBLIVContent 中查找 module_id 为 84 的任何记录,以显示在针对 tblIVTextData 进行查询的查询中

我需要的列是 FirstName 的 Field_id 始终为 531,Lastname 的 field_id 为 543,依此类推。

结束状态我需要以下输出

 FirstName     |      LastName.    |       JobTitle    |

记录 1 如下:

  • FirstName 等于 Content_id 的 263229 和 field_id 的 531
  • LastName 等于 Content_id 的 263229 和 field_id 的 543
  • JobTitle 等于 Content_id 的 263229 和 field_id 的 544

我什至不知道该怎么做。我不觉得加入是正确的方式吗?有人能带领我走上正确的道路吗?

我不一定想要答案(试图在这里学习),但什么是开始这个​​的正确方法?谷歌返回了很多,但我不确定这是我需要的。

【问题讨论】:

  • 问:那你到底要问什么?您是否需要“插入”触发器(从您的 UI 添加新数据)?或者您只想查询现有数据(以便在您的 UI 中显示它)?

标签: sql sql-server sql-server-2012 pivot inner-join


【解决方案1】:

使用条件聚合:

select
    content_id,
    max(case when d.field_id = 531 then field_value end) firstName,
    max(case when d.field_id = 543 then field_value end) lastName,
    max(case when d.field_id = 544 then field_value end) jobTitle
from TBLIVTextData d
inner join tblIVContent c on c.content_id = d.content_id
where c.module_id = 84
group by content_id

【讨论】:

  • 我认为这让我走上了正确的道路!谢谢,现在我必须弄清楚如何处理 module_id 84 下的多条记录,然后结合每个 content_id 的内容,因为 max 只显示 1 条记录。
  • 当我尝试使用 MAX 执行此操作时,它只返回一个结果,如果我尝试在没有 max 的情况下执行此操作,我会得到大量结果,包括所有 NULLS
  • @Nathan:你需要group_by。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多