簡體   English   中英

使用SQL連接表作為額外的列

[英]Using a SQL join table as extra columns

我試圖編寫一個查詢,從其他幾個表中提取數據作為查詢中的列。

數據如下:

用戶表

ID    ACCOUNT_ID    FIRST_NAME        LAST_NAME
1         1             Joe            SMITH
2         1             Bill           WALTERS
3         1             Bill           JOHNSON

用戶字段表

ID      ACCOUNT_ID     NAME
 1         1            CITY
 2         1            STATE
 3         2            EMPLOYEE_NUMBER
 4         3            MIDDLE_NAME

用戶字段數據表

ID    USER_FIELD_ID      USER_ID     DATA
 1         1               1         LINCOLN
 2         2               1         NEBRASKA

我想要一個類似的查詢:

SELECT FIRST_NAME, LAST_NAME FROM users WHERE ACCOUNT_ID=1

但是我希望將CITY和STATE作為列包括在內,但是根據ACCOUNT_ID和“用戶字段”表中的數據,它們將有所不同。

我以為使用PIVOT可以實現此目的,但是我很難將其發揮作用。 謝謝!

使用此代碼的行為將類似於PIVOT。 您需要為所需的每個User Field類型添加一個MAX(CASE) 由於它使用的是匯總,因此對於每個User Field ,您只能從User Fields Data獲得一個值

SELECT  u.FIRST_NAME, 
        u.LAST_NAME, 
        uf.CITY, 
        uf.STATE
FROM    users u
        LEFT JOIN (SELECT   uf.ACCOUNT_ID,
                            ufd.USER_ID,
                            MAX(CASE WHEN uf.NAME = 'CITY' THEN [DATA] END) AS CITY,
                            MAX(CASE WHEN uf.NAME = 'STATE' THEN [DATA] END) AS STATE
                   FROM     UserFields uf
                            JOIN UserFieldData ufd ON uf.ID = ufd.USER_FIELD_ID
                   GROUP BY uf.ACCOUNT_ID,
                            ufd.USER_ID
                  ) uf ON uf.USER_ID = u.ID
                          AND uf.ACCOUNT_ID = u.ACCOUNT_ID
WHERE   u.ACCOUNT_ID = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM