2014-10-31 83 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