0

こんにちは、次の結果を生成するクエリがありますか?

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

クエリが「HE」を含む 2 つの行を結合するようにするにはどうすればよいですか。私が求めている結果は次のとおりです。

  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記述を含む2つの行で何が異なるかを特定する必要があります...最初の結果で文字「P」と「F」を与える列が含まれているに違いありませんグループ句...したがって、グループからそれらを切り離す必要があります..それらを連結する方法を確認してください...(mySQLにはGROUP_CONCAT()コマンドがありますが、sqlserverにはまだそれを行うためのネイティブ関数がないと思います、しかし、この結果を得るには多くのテクニックがあります)

しかし、このようにしてあなたは線を得るでしょう

81 - 85 HE PFT 691

最初の結果セットのクエリを投稿すると、問題をよりよく理解して解決策を得るのに役立ちます

とにかく..そうでない場合、なぜこれらの2行を1つに集約したいのかわかりません..しかし、唯一の解決策は、Kafソリューションのような「HE」を持つ名前を特定することです.

于 2013-01-23T12:53:15.583 に答える
0

別の列、つまり結合したい情報を含む計算列を作成する必要があります。つまり、その情報 (サンプルの HE) を別の列に抽出します。

非常に多くの行がある場合は、結合を高速化するために、ビューを作成し、その列にインデックスを追加する (したがって、ビューを具体化する) ことを検討してください。

于 2013-01-23T12:16:41.317 に答える