0

您好,有一个查询会产生以下结果吗?

  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

谢谢

4

3 回答 3

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
于 2013-01-23T12:19:25.723 回答
1

原始结果集中的列“名称”只是一列,还是通过连接数据构建的计算列?

使用武力(就像绝地武士一样),我会说它似乎将数字与描述和字母 PT、FT 连接起来......

如果是这种情况..您必须在组子句中确定包含 HE 描述的两行中有什么不同...我敢打赌,在第一个结果中给出字母“P”和“F”的列在group 子句......所以你应该通过......将它们从组中切断......看看如何连接它们......(在 mySQL 中有命令 GROUP_CONCAT(),但在 sqlserver 中我想仍然没有本机函数来做到这一点,但有很多技术可以得到这个结果)

但这样你就会得到这条线

81 - 85 他 PFT 691

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

无论如何..如果不是这种情况,我不明白为什么您应该将这两行合二为一..但唯一的解决方案是确定哪些名称具有像 Kaf 解决方案一样的“HE”。

于 2013-01-23T12:53:15.583 回答
0

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

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

于 2013-01-23T12:16:41.317 回答