2014-10-31 81 views
0

我想將數據分組爲多個組。將數據分成多個組

例如,如下所示。

我有一個表測試:

create table test 
(
column1 varchar(10), 
column2 varchar(10) 
) 

插入一些數據:

insert into test values('X','Y'); 
insert into test values('Y','Z'); 
insert into test values('X','A'); 
insert into test values('O','P'); 
insert into test values('N','M'); 
insert into test values('S','T'); 
insert into test values('W','O'); 
insert into test values('A','K'); 
insert into test values('E','N'); 

現在我有這樣的數據:

select * from test; 

column1 column2 
------------------ 
    X   Y 
    Y   Z 
    X   A 
    O   P 
    N   M 
    S   T 
    W   O 
    A   K 
    E   N 

在上面的數據中,我有我必須將它們彼此屬於的組進行分組的值:
(X-Y,Y-Z,X-A,A-K)(O-P,W-O)(N-M,E-N)

對於這些值我必須作出一個組,即group 1,2,3

組1:(X-Y,Y-Z,X-A,A-K)
組2:(O-P,W-O)
第3組:(N-M,E-N)

而且我想顯示的格式如下表:

結果

Group Number column1 column2 
-------------------------------- 
    1   X   Y 
    1   Y   Z 
    1   X   A 
    2   O   P 
    3   N   M 
    0   S   T 
    2   W   O 
    1   A   K 
    3   E   N 
+1

您的任何努力? – Umair 2014-10-31 05:38:29

+0

@Umair,真的沒有得到。該怎麼辦? – Meem 2014-10-31 05:39:40

回答

2
SELECT 
    CASE (column1 + column2) 
     WHEN 'XY' THEN '1' 
     WHEN 'YZ' THEN '1' 
     WHEN 'XA' THEN '1' 
     WHEN 'AK' THEN '1' 
     WHEN 'OP' THEN '2' 
     WHEN 'WO' THEN '2' 
     WHEN 'NM' THEN '3' 
     WHEN 'EN' THEN '3' 
     ELSE '0' 
    END AS [Group Number], 
    column1, 
    column2 
FROM test 
--ORDER BY [Group Number] 

或者......

SELECT 
    CASE 
     WHEN (column1 + column2) IN ('XY', 'YZ', 'XA', 'AK') THEN '1' 
     WHEN (column1 + column2) IN ('OP', 'WO') THEN '2' 
     WHEN (column1 + column2) IN ('NM', 'EN') THEN '3' 
     ELSE '0' 
    END AS [Group Number], 
    column1, 
    column2 
FROM test 
+0

我認爲他不想要一個ORDER BY – 2014-10-31 05:56:50

+1

你也已經手動創建了這個組合...但是我認爲在實際的DB中不會有這種特定和有限的組合。他提供了他桌上的一些數據,不是全部。 – 2014-10-31 06:07:06

+0

@ user2315555,當我們需要自定義的東西來實現時,我們需要在某處指定這些東西,對吧?你認爲有什麼方法可以保存自定義分組嗎? – 2014-10-31 06:36:33

0
DECLARE @table TABLE (GroupNumber int,column1 VARCHAR(1),column2 VARCHAR(1)) 
INSERT INTO @table VALUES 
(1,'X','Y'),(1,'Y','Z'),(1,'X','A'),(1,'A','K'), 
(2,'O','P'),(1,'W','O'), 
(3,'N','M'),(3,'E','N') 

SELECT  ISNULL(LU.GroupNumber,0) GroupNumber, 
      T.column1, 
      T.column2 
FROM  test T 
LEFT JOIN @table LU 
      ON T.column1 = LU.column1 
      AND T.column2 = LU.column2 
+0

只有代碼?你能解釋一下嗎? – Umair 2014-10-31 05:42:13

+1

你在臨時表中手動創建了組? – 2014-10-31 05:43:37

+0

@Jithin Shaji,我不想將組號和組手動插入臨時表,我必須計算。 – Meem 2014-10-31 05:43:44