根据相同的id从多个表中选择数据和字段名



我试图找到我的"问题"的最佳解决方案,但我的SQL知识是有限的,所以我请求你的帮助。

我目前有一个名为Project的"主"表,它的主键(ProjectId)用于其他表,如"Description"(见下文)

Table "Project" :
+-----------+----------+-----------+
| ProjectId | P_Field1 | P_Field2  |
+-----------+----------+-----------+
| 1         | val1     | val2      |
+-----------+----------+-----------+
Table "Descriptive" :
+-----------+----------+-----------+
| ProjectId | D_Field1 | D_Field2  |
+-----------+----------+-----------+
| 1         | valA     | valB      |
+-----------+----------+-----------+

我试图写一个存储过程,选择所有的数据与多个表的字段名,基于"投影",那么输出结果将是:

Sotred Procedure Result with parameter @ProjectId = 1 :
+-----------+----------+
| FieldName | Value    |
+-----------+----------+
| P_Field1  | val1     |
+-----------+----------+
| P_Field2  | val2     |
+-----------+----------+
| D_Field1  | valA     |
+-----------+----------+
| D_Field2  | valB     |
+-----------+----------+

一个朋友告诉我,SQL"PIVOT"函数可以帮助我,但我从来没有使用过这个函数,我对它的搜索真的没有帮助我,因为它经常与"SUM","MAX"等一起使用,我不需要它。

您想要unpivot,而不是pivotunion

select fieldname, value from [project] 
unpivot (value for fieldname in ([p_field1],[p_field2])) p
where projectid=1
union all
select fieldname, value from [descriptive] 
unpivot (value for fieldname in ([d_field1],[d_field2])) p
where projectid=1

最新更新