我有两张表:
T1:
ID Department ATTRIBUTES TEAM
--- ---------- ---------- ------
1 R&D Dress_Code NULL
2 R&D Dress_Code Web
3 R&D Food System
4 R&D Food NULL
5 R&D Color NULL
6 Marketing Food SystemT2:
ID VAL
--- ----------
1 Smart
2 Casual
3 Beef
4 Chicken
5 Green
6 FishT1的目的是显示所有部门属性。
如果团队为null,则适用于该部门的每个人。有时,团队具有覆盖通用设置的特殊设置。
例如,我想要在研发中作为一个'Web‘团队来获取设置。
我可以写:
SELECT T1.DEPARTMENT, T1.ATTRIBUTES, T1.TEAM, T2.VAL
FROM T1
LEFT JOIN T2 ON T1.ID = T2.ID
WHERE T1.DEPARTMENT = 'R&D' AND T1.TEAM = 'Web'这将显示一条记录,说明着装要求是休闲的。
但我希望结果是:
ATTRIBUTES VAL
---------- ------
Dress_Code Casual
Food Chicken
Color Green同样,对于研发中的“系统”团队,结果将是智能着装规范、牛肉和绿色。
我想首先选择所有R&D结果,然后用上面的select结果替换行。
我需要把它写成一个存储过程。
任何帮助都是非常感谢的!
发布于 2017-01-13 19:45:30
使用CTE和row_number():
with CTE as(
select
ATTRIBUTES,
VAL,
T1.TEAM,
row_number() over (partition by ATTRIBUTES order by team desc) rn
from t1 t1
inner join t2 t2 on t1.ID =t2.ID
AND ( T1.TEAM = 'Web' or T1.TEAM is null )
)
select
ATTRIBUTES ,
VAL
from cte where rn=1
order by valOutPut:

发布于 2017-01-13 19:50:39
SELECT
T1.DEPARTMENT,
T1.ATTRIBUTES,
T1.TEAM,
T2.VAL
INTO #temp
FROM T1
INNER JOIN T2 ON T1.ID = T2.ID
WHERE T1.TEAM is NULL
SELECT
T1.ATTRIBUTES,
T2.VAL
INTO #t2
FROM T1
INNER JOIN T2 ON T1.ID = T2.ID
WHERE T1.TEAM = 'Web'
UPDATE t
SET t.VAL=b.VAL
FROM #temp t
join #t2 b on b.ATTRIBUTES=t.ATTRIBUTES
SELECT
DEPARTMENT,
ATTRIBUTES,
TEAM,
VAL
FROM #temp即使这样也会有所帮助。
https://stackoverflow.com/questions/41633290
复制相似问题