首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个SELECT替换SELECT查询中的某些行

如何从另一个SELECT替换SELECT查询中的某些行
EN

Stack Overflow用户
提问于 2017-01-13 19:11:45
回答 2查看 76关注 0票数 0

我有两张表:

T1:

代码语言:javascript
复制
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        System

T2:

代码语言:javascript
复制
ID    VAL  
---   ----------
1     Smart
2     Casual
3     Beef
4     Chicken
5     Green
6     Fish

T1的目的是显示所有部门属性。

如果团队为null,则适用于该部门的每个人。有时,团队具有覆盖通用设置的特殊设置。

例如,我想要在研发中作为一个'Web‘团队来获取设置。

我可以写:

代码语言:javascript
复制
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'

这将显示一条记录,说明着装要求是休闲的。

但我希望结果是:

代码语言:javascript
复制
ATTRIBUTES  VAL  
----------  ------
Dress_Code  Casual
Food        Chicken
Color       Green

同样,对于研发中的“系统”团队,结果将是智能着装规范、牛肉和绿色。

我想首先选择所有R&D结果,然后用上面的select结果替换行。

我需要把它写成一个存储过程。

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2017-01-13 19:45:30

使用CTE和row_number():

代码语言:javascript
复制
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 val

OutPut:

票数 1
EN

Stack Overflow用户

发布于 2017-01-13 19:50:39

代码语言:javascript
复制
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

即使这样也会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41633290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档