Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为以下情况设计SQL查询_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

为以下情况设计SQL查询

为以下情况设计SQL查询,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,以桌子为例 Table1 id, name 1 xyz 2 abc 3 pqr Table2 id title 1 Mg1 2 Mg2 3 SG1 Table3 Tb1_id tb2_id count 1 1 3 1 2 3 1 3 4 2 2 1 3 2 2 3 3 2 I want to do query t

以桌子为例

Table1
id, name
1   xyz
2   abc
3   pqr

Table2
id title
1  Mg1
2  Mg2
3  SG1

Table3
Tb1_id  tb2_id  count
1         1      3
1         2      3
1         3      4
2         2      1
3         2      2
3         3      2


I want to do query to give result like
id     title
1       MG1
2       MG2
3       Two or More Title

如果MG1和计数>=1,则MG1具有更高的优先权,然后将其作为MG1标题给出,对于其他人,则使用相应的标题,对于计数>1,则使用两个或两个以上的标题

,我认为这就是您想要的:

select t3.Tb1_id as id, 
    case
        when mg1cnt.count >= 1 then 'MG1'
        when cnt.count = 1 then upper(t2.title)
        else 'Two or More Titles'
    end as title
from (
    select Tb1_id, count(*) as count
    from Table3
    group by Tb1_id
) cnt
inner join (
    select Tb1_id, isnull(SUM(case when t2.title='mg1' then 1 end), 0) as count
    from Table3 t3
    inner join Table2 t2 on t3.tb2_id = t2.id
    group by Tb1_id
) as mg1cnt on cnt.Tb1_id = mg1cnt.Tb1_id
inner join Table3 t3 on cnt.Tb1_id = t3.Tb1_id
inner join Table2 t2 on t3.tb2_id = t2.id
group by t3.Tb1_id,
    case
        when mg1cnt.count >= 1 then 'MG1'
        when cnt.count = 1 then upper(t2.title)
        else 'Two or More Titles'
    end

为什么要为id
2
输出
MG2
?它有
count>1
,而不是
MG1
。如果它有两个或多个标题
count
,则使用cnt存储,与
cnt
相同?你能编辑你的最后一句话,提供更多关于你为什么期望哪个结果的信息吗?