2012-02-04 2 views
0

Мой результат не такой, как я ожидал, что я хочу, удалены дублированные данные. я пытался использовать group by и distinct раньше, но он не работает. = (Устранены дублированные данные в ретрансляторе

данные в моей базе данных

who are u? A 
who are u? B 
who are u? C 
who am i? A 
who am i? B 
who am i? C 

токовый выход

Колонка 'ExerciseTable.r1' недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

ожидается выход

who are u? A 
      B 
      C 

Who am i? A 
      B 
      C 

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
SelectCommand="SELECT [Question],[r1] FROM [ExerciseTable] GROUP BY [Question]"> 

</asp:SqlDataSource> 
+0

Группа не работает, потому что все выбранные столбцы должны быть в группе самими или быть агрегатами - SELECT [Question], [r1] FROM [ExerciseTable] GROUP BY [Question], [r1] будет работать - но не сделал бы вам много хорошего, по общему признанию, –

ответ

1

В вашем SQL заявления (c1 первый столбец, c2 второй столбец):.

Select 
case when t.[RN]>1 and t.[RN]<>4 then '' else t.c1 end [c1], 
t.c2 from 
(
Select ROW_NUMBER() OVER (ORDER BY c1) AS [RN],c1,c2 from t1 
) as t 

Без фиксированного ROWNUMBER (т [ RN]):

Select 
case 
when 
t.[RN]=( 
    Select min([RN]) from 
    (
    Select ROW_NUMBER() OVER (ORDER BY c1) AS [RN],c1,c2 from t1 
    ) as t where c1='who am i?' 
) 
or 
t.[RN]=(
    Select min([RN]) from 
    (
    Select ROW_NUMBER() OVER (ORDER BY c1) AS [RN],c1,c2 from t1 
    ) as t where c1='who are u?' 
) then t.c1 else '' end [c1], 
t.c2 from 
     (
     Select ROW_NUMBER() OVER (ORDER BY c1) AS [RN],c1,c2 from t1 
     ) as t 

Или вы можете выполнить итерацию по набору результатов (например: список) с помощью C#/VB.Net и удалить данные из столбца для следующих строк после того, как первый из них имеет «who am i?» И тот же для ' которые являются u? '

+0

erm, я попробую его сейчас –

Смежные вопросы