Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQl中选择表时添加列_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 在SQl中选择表时添加列

Sql 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

我的第一个表是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

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,因为我不确定该字段的用途是什么-希望您现在可以在上面添加任何逻辑,但是如果您有任何其他问题,请发回并询问。