我试图编写一个查询,将其他几个表中的数据作为查询中的列。
以下是数据:
用户表
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完成的,但我很难让它发挥作用。谢谢!
答案 0 :(得分:0)
使用此代码将类似于PIVOT。您需要为所需的每个MAX(CASE)
类型添加User Field
。由于它使用的是聚合,因此每User Fields Data
User Field
获得一个值
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