【问题标题】:Create new column in query from rows of data using SQL self joining aliases使用 SQL 自连接别名从数据行中创建查询中的新列
【发布时间】:2020-05-14 13:05:45
【问题描述】:

我有 3 个不同的(人员和地址信息)当前位于 3 行中。我需要它们都在每个项目编号的一行中。我在想我需要进行自我连接,但我陷入了语法困境。这需要是一个未聚合且不能使用数据透视函数的查询。

当前 SQL 语句:

Select ActivityID, NAMETYPE, NAME, ADDRESS1, CITY, Zip from People

电流输出

ActivityID      NAMETYPE     NAME                        ADDRESS                    CITY    STATE ZIP
SPAR19-00001    APPLICANT    weler, Inc.                  W204 Goldendale Road      town    MI  12354
SPAR19-00001    OWNER        Aircraft Services LLC        26 Aviation Dr         villiage   MI  12345
SPAR19-00001    ARCHITECT    Engineering Consultatns      700 Parkway               Grove   MI  12345

希望它看起来像

ActivityID   APPLNAME      APPLADDRESS       APPLCITY    OWNERNAME        OWNERADDRESS    OWNERCITY etc
SPAR19-00001 weler, Inc.   W204 Goldendale Road  town    Aircraft Services 26 Aviation Dr villiage

为了更清楚,这是一张图片。

【问题讨论】:

  • 您使用的是哪个 RDBMS?另外,您能否清楚地格式化您当前和预期的输出。很难理解。
  • sql server,我发现这很难阅读。我将包括图片。谢谢!

标签: sql sql-server syntax self-join


【解决方案1】:

您可能希望按列分组并使用 max(case logic),如下所示

select ActivityID
       , max(case when NAMETYPE='APPLICANT' then NAME end) as applname
       , max(case when NAMETYPE='APPLICANT' then ADDRESS1 end) as appladdress
       , max(case when NAMETYPE='APPLICANT' then CITY end) as applcity
       , max(case when NAMETYPE='OWNER' then NAME end) as ownername
       , max(case when NAMETYPE='OWNER' then ADDRESS1 end) as owneraddress
       , max(case when NAMETYPE='OWNER' then CITY end) as ownercity
  from People
group by ActivityID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多