这是我必须要合作的。
Table A
-------
UnitID NamedValue Value
Null TestA 11
Null TestB 30
1 TestA 20
1 TestB 15
2 TestA 18
如果尚未设置UnitID,表A包含所有已定义的值和默认值。 因此,UnitID 1应将TestA值提高20,将TestB提取为15。 UnitID 2应该提取TestA值18和默认值TestB值30
结果应如下所示:
UnitID NamedValues Value
1 TestA 20
1 TestB 15
2 TestA 18
2 TestB 30
我没有设计这个东西,但我必须使用它。 请帮助我提供所需结果的联接。我可以使用临时表来实现它,但希望能够进行简单的连接。
答案 0 :(得分:1)
此查询查找UnitID和NamedValue的所有组合,并使用默认值填充所有缺失值。不是最美丽的查询,但似乎可以完成这项工作;
WITH cte AS (
SELECT DISTINCT a.UnitID, b.NamedValue
FROM Table_A a CROSS JOIN Table_A b
WHERE a.UnitID IS NOT NULL
)
SELECT cte.UnitID, cte.NamedValue, COALESCE(c.Value, d.Value) Value
FROM cte
LEFT JOIN Table_A c ON cte.UnitID = c.UnitID AND cte.NamedValue = c.NamedValue
LEFT JOIN Table_A d ON d.UnitID IS NULL AND cte.NamedValue = d.NamedValue
答案 1 :(得分:0)
这应该这样做:
SELECT a.UnitID, v.NamedValues, COALESCE(v.Value, d.Value) As Value
FROM (Select 'TestA' As Nam UNION ALL Select 'TestB') v
LEFT OUTER JOIN
(Select UnitID, NamedValues, MAX(Value) As Value
From TableA
Group By UnitID, NamedValues
) a
ON v.Nam = a.NamedValues
LEFT OUTER JOIN
(Select UnitID, NamedValues, MAX(Value) As Value
From TableA
Where UnitID IS NULL
Group By UnitID, NamedValues
) d
ON v.Nam = d.NamedValues