我有六个桌子
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列。但是我无法编写查询来获取第四列中的数据。
请告知。
答案 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保存到一个表列中。