0

複数の条件で実行されるクエリがあり、結果は次のようになります。

コード-名前-Code2

a     abc     a.1
a     abc     a.2
a     abc     a.3
a     abc     a.4

b     bad     b.1
b     bad     b.2
b     bad     b.3

結果を次のように表示する必要があります

コード-名前-Code2

a      abc      a.1
                a.2
                a.3
                a.4

b      bad      b.1
                b.2
                b.3

T-SQLを使用することは可能ですか?
SQLServer2008-R2を使用しています。

4

4 に答える 4

1

CTEは次のように使用できますROW_NUMBER

WITH CTE AS
(
   SELECT Code, Name, Code2,
      RN = ROW_NUMBER() OVER (PARTITION BY Code, Name ORDER BY Code2)
   FROM dbo.TableName
   WHERE ....
)
SELECT 
    CASE WHEN RN > 1 THEN '' ELSE Code END AS Code, 
    CASE WHEN RN > 1 THEN '' ELSE Name END AS Name, 
    Code2
FROM CTE

デモの編集(データのbluefeetに感謝)

于 2013-03-15T11:03:41.640 に答える
1

row_number()結果を取得するために使用できます。

select 
  case when rn = 1 then code else '' end code,
  case when rn = 1 then name else '' end name,
  code2
from
(
  select code, name, code2,
    row_number() over(partition by code, name order by code2) rn
  from table3
) src

SQL FiddlewithDemoを参照してください

于 2013-03-15T11:03:52.387 に答える
0

これを試して :-

With cte(Col1,col2,col3) as
(
 Select 'a','abc','a.1'
 union all
 Select 'a',    'abc','a.2'
 union all
 Select 'a',    'abc','a.3'
 union all
 Select 'a',    'abc','a.4'
 union all
 Select 'b',    'bad','b.1'
 union all
 Select 'b',    'bad','b.2'
 union all
 Select 'b',    'bad','b.3'
 ),
 cte1 as
(Select * ,  
 row_number() over ( partition by col1,col2 order by (select 0)) as rn 
 from cte
)
 Select case when rn=1 then col1 else null end,
 case when rn=1 then col2 else null end,
 col3
 from cte1
 order by col3
于 2013-03-15T11:08:25.270 に答える
0

これは、純粋にSQLでrow_number()ランキングを使用して行うことができます。

with val_ranks as (
   select code,name,code2,
       row_number() over (partition by code order by code2) as rown
       from foo
)
select case when rown=1 then code else '' end as code,
       case when rown=1 then name else '' end as name,
       code2
   from val_ranks
   order by code2;

SQLFiddleの例

于 2013-03-15T11:06:42.680 に答える