3

列がすべてのレコードのグループを表すいくつかのレコードを含むテーブルがあります。

id  | group
1     abc_xxx
2     abc_yyy
3     def_ooo
4     def_ppp
5     ghi_jjj
6     ghi_kkk

クエリを実行し、グループ列で行をグループ化すると、次のようになります。

abc_xxx
abc_yyy
def_ooo
def_ppp
ghi_jjj
ghi_kkk

ただし、必要な出力は正しくありません。代わりに、次のようなものを取得する必要があります。

abc
def
ghi

これは、グループ列の下のレコードの実際の分類を表すためです。そのため、SQLServer2005でそれを取得できるメソッドを探しています。

4

5 に答える 5

9

SUBSTRINGまたはLEFTを使用します(これはより単純ですが非標準です):

SELECT
    SUBSTRING([group], 1, 3) AS [group]
FROM table
GROUP BY 
    SUBSTRING([group], 1, 3)

または、

SELECT
    LEFT([group], 3) AS [group]
FROM table
GROUP BY 
    LEFT([group], 3)

グループ化するときは通常何かを集約するので、次のようなものを探していると思います。

SELECT
    SUBSTRING([group], 1, 3) AS [group],
    COUNT(*) AS [count]
FROM table
GROUP BY 
    SUBSTRING([group], 1, 3)
于 2013-02-01T21:06:06.470 に答える
1

選択でSUBSTRING()を使用してみませんか?MSDN SUBSTRING()構文を参照してください

于 2013-02-01T21:05:58.767 に答える
1
SELECT
  t.id,
  t.groupcode
FROM
  (SELECT id, group, left(group,charindex('_',group)-1) as groupcode FROM table) t
GROUP BY
  groupcode
于 2013-02-01T21:08:49.277 に答える
0

leftグループを抽出する方法prefix

SELECT LEFT([group], 3) AS grp
FROM table
GROUP BY LEFT([group], 3);

注:列名に予約済みのキーワードを使用しないようにしてください。例:group

于 2013-02-01T21:10:16.727 に答える
0

多分このようなもの?

SELECT DISTINCT SUBSTRING(col, 1, CHARINDEX('_', col) -1)
FROM kittens
于 2013-02-01T21:08:14.213 に答える