在同一个表sql查询中加入2行

时间:2013-01-23 12:00:00

标签: sql sql-server join

您有一个产生以下结果的查询吗?

  name                       count    
  19 - Evening ACL           1130
  21 - 14 - 16 Provision     585
  81 - HE FT                 458
  85 - HE PT                 233

我怎样才能使查询加入两行包含'HE'。我追求的结果是:

  name                    count
  19 - Evening ACL        1130
  21 - 14 - 16 Provision  585
  HE                      691

这是我正在使用的查询

SELECT 
vc.vc_name,
COUNT(DISTINCT s.s_studentreference) AS 'Count'

FROM

student s
INNER JOIN person p ON p.p_id = s.s_id
INNER JOIN moduleenrolment e ON e.e_student = p.p_id
INNER JOIN module m ON m.m_id = e.e_module
LEFT JOIN valid_codes vc ON vc.vc_code = m.m_mode AND vc.vc_domain = 'moa'

WHERE

LEFT(m.m_reference, 2) IN ('12')


GROUP BY

m.m_mode,
vc.vc_name

ORDER BY

m.m_mode,
vc.vc_name

由于

3 个答案:

答案 0 :(得分:1)

试试这个(假设'HE'两边都有空格);

select name, count
from yourTable where charindex(' he ',name)=0
union
select 'HE' name, sum(count) as count
from yourTable where charindex(' he ',name)>0

另一种方式是;

select A.name, sum(A.count) as count
from (
    select case charindex(' he ',name) 
           when 0 then name else 'HE' end name, count
    from yourTable
) A
group by A.name
order by A.name

答案 1 :(得分:1)

原始结果集中的“name”列 通过连接数据只是一个列或它的计算列构建?

使用武力(像绝地武士),我会说这似乎是将数字与描述和字母PT,FT联系起来......

如果是这种情况..你必须在group子句中识别包含HE描述的两行中有什么不同...我打赌在第一行中给出字母“P”和“F”的列结果是在group子句中...所以你应该把它们从组中删除..并看看它们如何连续...(在mySQL中有命令GROUP_CONCAT(),但在sqlserver中我猜还是没有本机函数要做到这一点,但有很多技术可以得到这个结果)

但是通过这种方式你可以得到这条线

  

81 - 85 HE PFT 691

如果您发布第一个结果集的查询将有助于更好地理解您的问题以提供解决方案

无论如何..如果不是这样的话我不明白你为什么要把这两行合二为一......但是唯一的解决办法就是找出哪个名字的'HE'就像Kaf解决方案一样。

答案 2 :(得分:0)

您需要创建另一个列,一个包含您要加入的信息的计算列 - 即在单独的列中提取该信息(样本的HE)。

如果您有很多行,请考虑创建视图并在该列上添加索引(从而实现视图)以加快连接速度。