Sql server 在SQl中选择表时添加列
我的第一个表是ProjectCustomFieldsSql server 在SQl中选择表时添加列,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我的第一个表是ProjectCustomFields CustomFieldId ProjectId CustomFieldName CustomFieldRequired CustomFieldDataType 69 1 User Name 1 0 72 1 City 1 0 74 1 Email 0 0 82 1 Salary 1 2 我的第二个表是ProjectCustomFieldValues CustomFieldVal
CustomFieldId ProjectId CustomFieldName CustomFieldRequired CustomFieldDataType
69 1 User Name 1 0
72 1 City 1 0
74 1 Email 0 0
82 1 Salary 1 2
我的第二个表是ProjectCustomFieldValues
CustomFieldValueId ProjectId CustomFieldId CustomFieldValue RecordId
35 1 69 kaliya 1
36 1 72 Bangalore 1
37 1 74 mm@gmail.com 1
41 1 69 Yohesh 2
42 1 72 Delhi 2
43 1 74 2
50 1 69 sss 3
51 1 72 Delhi 3
52 1 74 sss@icsportal.in 3
57 1 69 Sunil 4
58 1 72 Mumbai 4
59 1 74 sunil@icsportal.in 4
60 1 82 20000 4
我试着在下面提问
Select M.CustomFieldName
, N.CustomFieldValue
, N.RecordId
From
(
Select G.CustomFieldName
, H.RecordId
From
(
Select CustomFieldName
From ProjectCustomFields
Where ProjectId = 1
) G
Cross Join
(
Select Distinct RecordId
From ProjectCustomFieldValues
) H
) M
Left Join
(
Select CustFiled.CustomFieldName
, CustValue.CustomFieldValue
, CustValue.RecordId
From ProjectCustomFieldValues CustValue
Left Join ProjectCustomFields CustFiled
On CustValue.CustomFieldId = CustFiled.CustomFieldId
Where CustValue.AuctionId = 1
) N
On M.CustomFieldName = N.CustomFieldName
And M.RecordId = N.RecordId
但我得到了下面的结果
#CustomFieldName# CustomFieldValue RecordId
User Name kaliya 1
City Bangalore 1
Email mm@gmail.com 1
Salary NULL **NULL**
User Name Yohesh 2
City Delhi 2
Email 2
Salary NULL **NULL**
User Name sss 3
City Delhi 3
Email sss@icsportal.in 3
Salary NULL **NULL**
User Name NULL **NULL**
City NULL **NULL**
Email NULL **NULL**
Salary NULL **NULL**
User Name Sunil 4
City Mumbai 4
Email sunil@icsportal.in 4
Salary 20000 4
但预期的结果是
CustomFieldName CustomFieldValue RecordId
User Name kaliya 1
City Bangalore 1
Email mm@gmail.com 1
Salary NULL **1**
User Name Yohesh 2
City Delhi 2
Email 2
Salary NULL **2**
User Name sss 3
City Delhi 3
Email sss@icsportal.in 3
Salary NULL **3**
User Name Sunil 4
City Mumbai 4
Email sunil@icsportal.in 4
Salary 20000 4
请给我一些指导,我尝试了很多,但是我在recordId中得到了空值,所以我需要一个以上相同的recordId。您正在选择
N.recordId
,它来自CustValue.recordId>字段,它来自表projectCustomFieldValue
中的左连接
ProjectCustomFieldValues
中没有记录1、2或3的薪资条目,这就是为什么在左联接后返回NULL
选择M.RecordId
可能会更成功,但您的整个语句可能需要进行一些认真的重构 试试这个:
declare @ProjectCustomFields table
(
CustomFieldId bigint not null primary key clustered
, ProjectId int not null
, CustomFieldName nvarchar(64) not null
, CustomFieldRequired bit not null
, CustomFieldDataType int not null
)
insert @ProjectCustomFields
select 69, 1, 'User Name', 1, 0
union select 72, 1, 'City' , 1, 0
union select 74, 1, 'Email' , 0, 0
union select 82, 1, 'Salary' , 1, 2
declare @ProjectCustomFieldValues table
(
CustomFieldValueId bigint not null primary key clustered
, ProjectId int not null
, CustomFieldId bigint not null --foreign key references ProjectCustomFields(CustomFieldId)
, CustomFieldValue nvarchar(max)
, RecordId bigint not null
)
insert @ProjectCustomFieldValues
select 35, 1, 69, 'kaliya' , 1
union select 36, 1, 72, 'Bangalore' , 1
union select 37, 1, 74, 'mm@gmail.com' , 1
union select 41, 1, 69, 'Yohesh' , 2
union select 42, 1, 72, 'Delhi' , 2
union select 43, 1, 74, '' , 2
union select 50, 1, 69, 'sss' , 3
union select 51, 1, 72, 'Delhi' , 3
union select 52, 1, 74, 'sss@icsportal.in' , 3
union select 57, 1, 69, 'Sunil' , 4
union select 58, 1, 72, 'Mumbai' , 4
union select 59, 1, 74, 'sunil@icsportal.in', 4
union select 60, 1, 82, '20000' , 4
select vf.CustomFieldName
, v2.CustomFieldValue
, vf.RecordId
from
(
select distinct
v.RecordId
, f.CustomFieldName
, f.CustomFieldId
from @ProjectCustomFieldValues v
cross join @ProjectCustomFields f
) vf
left outer join @ProjectCustomFieldValues v2
on vf.RecordId = v2.RecordId
and vf.CustomFieldId = v2.CustomFieldId
order by vf.RecordId, vf.CustomFieldId
工资字段仅添加在ProjectCustomFieldValues的最后一个值中,该值是ProjectCustomFieldsYes中工资的CustomFieldId。获取4的RecordID的原因是,在ProjectCustomFieldValues中有一个RecordID为4的条目具有CustomFieldId 82。RecordId 1、2或3没有CustomFieldId 82的条目,这就是为什么没有任何东西可以通过的原因,正如我所说的.ps。这目前没有考虑项目id,因为我不确定该字段的用途是什么-希望您现在可以在上面添加任何逻辑,但是如果您有任何其他问题,请发回并询问。