如何在不同表格的单元格中填充值(以逗号分隔)

时间:2018-09-10 18:17:28

标签: sql sql-server sql-server-2012

我有六个桌子

a。员工

EmployeeId         EmployeeName
123                John
125                Peter
129                Jack

b。 EmployeeParameterValue

EmployeeParameterValueId         EmployeeId    ParameterValueId
1                                123           1
2                                125           2
3                                129           3

c。 ParameterValue

ParameterValueId    ParameterId    Value
1                   2              1, 2, 3
2                   3              1, 2
3                   2              3
d。参数

ParameterId      Name
2                WorkedStates
3                WorkedType

e。工作状态

WorkedStatesId    WorkedStatesName
1                 CA
2                 WA
3                 NY

f。 WorkedType

WorkedTypeId          WorkedTypeName
1                     Hourly
2                     Salaried

我需要以以下格式编写报告:

EmployeeId         EmployeeName       Parameter          ParameterValue
123                John               WorkedStates       CA, WA, NY
125                Peter              WorkedType         Hourly, Salaried
129                Jack               WorkedStates       NY

我能够编写一个查询来获取前3列。但是我无法编写查询来获取第四列中的数据。

请告知。

2 个答案:

答案 0 :(得分:1)

显然可以改进设计。

现在,您可以分割分隔的字符串,连接到适当的表,然后重新汇总结果,或者可以考虑使用UDF

示例

Select [dbo].[ParameterValue](2,'1, 2, 3')  

返回

CA, WA, NY

感兴趣的UDF

CREATE FUNCTION [dbo].[ParameterValue] (@P int,@S varchar(max))
Returns varchar(max)
AS
Begin

    Select @S = replace(@S,MapFrom,MapTo)
     From  (Select Top 10000 
                   MapFrom = WorkedStatesId
                  ,MapTo   = WorkedStatesName
             From  WorkedStates 
             Where @P=2
             Order By 1 desc
            Union All
            Select Top 10000
                   MapFrom = WorkedTypeId
                  ,MapTo   = WorkedTypeName
             From  WorkedType 
             Where @P=3
             Order By 1 desc
            ) A

    Return @S

End
-- Syntax : Select [dbo].[ParameterValue](2,'1, 2, 3')  

我不会在大桌子上建议这样做,但是性能可能不会那么差。

答案 1 :(得分:0)

使用JSON 用json格式保存数据。 如果以json格式保存数据,则在表的任何列中都有一个对象,可帮助您更好地组织表中的数据。 在一个json中保存两个或两个或多个树型表字段,然后将此json保存到一个表列中。