Группировка значений под заголовком MSSQL - PullRequest
2 голосов
/ 26 апреля 2011

Я хочу сгруппировать свою запись данных под другим «staff_id».

Мой запрос без GROUP BY работает безупречно, возвращая все нужные строки в обычной таблице. Я вывожу его в asp.net ListView, и он выглядит примерно так:

Staff_ID   Field1   Field2   Field3   Field4   ...........
Staff_ID   Field1   Field2   Field3   Field4   ...........
Staff_ID   Field1   Field2   Field3   Field4   ...........

Теперь я пытаюсь заставить их отображаться в группе asp.net ListView вместе по их идентификатору. Например, вот так:

Staff_ID                                              TOTALAMT
        Field1    Field2    Field3    Field4    Field5
        Field1    Field2    Field3    Field4    Field5
Staff_ID                                              TOTALAMT
        Field1    Field2    Field3    Field4    Field5
        Field1    Field2    Field3    Field4    Field5

В любом случае, чтобы сделать это? Я пробовал GROUP BY, как показано ниже, но я получаю ошибку:

Msg 8120, Level 16, State 1, Line 4

Column 'CLAIM_APPLICATION.CREATE_DATE' is invalid in the select list because 
it is not contained in either an aggregate function or the GROUP BY clause.

Вот мой запрос:

SELECT  
    '' Seq,
    '' Doc_Type,
    left(CONVERT(varchar, A.CREATE_DATE, 112),8)Post_date,
    left(CONVERT(varchar, A.CREATE_DATE, 112),8)Doc_date,
    ('S.C-'+left(CONVERT(varchar, A.CREATE_DATE, 112),6)+'-'+ A.user_id)Header, 
    ('S.Claim-'+left(CONVERT(varchar, A.CREATE_DATE, 112),6))Header_Ref,
    '' Trx_date,
    'MYR' Curr,
    '' Exh_rate,
    '' Line_no,     
    'S' CR_DB,
    '' Nega_post,
    C.GL,
    A.AMT,
    '' Loc_curr, 
    'SC-'+ A.CLINIC_SHOP Text1,     
    B.staff_id, 
    ''A,''B,''C,''D,
    'I0'Tax_code,''WBS,''E,
    A.cost_centre,
    ''F,    
    '0003' Pay_term,    
    left(CONVERT(varchar, getdate(), 112),8)Base_date  
FROM    CLAIM_APPLICATION AS A INNER JOIN
          CLAIM_USER_DETAIL AS B ON A.user_id = B.user_id INNER JOIN
                  CLAIM_TYPE AS C ON A.CLAIM_ID = C.CLAIM_ID
WHERE   (A.CLAIM_ID NOT IN (20, 21)) 
    and (CONVERT(varchar, A.CREATE_DATE, 111) >= '2011/01/01')
    and (CONVERT(varchar, A.CREATE_DATE, 111) <= '2011/04/30')
    and (A.STATUS ='A')
    -- and A.REF_NO <> 'MYSGCB'
    -- and (A.user_id <>'bkkhoo')
GROUP BY B.staff_id
ORDER BY B.name

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Во-первых, ошибка, которую вы получаете, заключается в том, что все столбцы в предложении group by должны быть в предложении select, если это не агрегатный столбец.

Это, однако, не даст вам желаемого результата. Что вам нужно сделать, это добавить итоговые строки в вашу таблицу данных, это должно дать вам то, что вы хотите.

Также посмотрите здесь для хорошего обзора ваших различных вариантов.

0 голосов
/ 26 апреля 2011

Использование GROUP BY в запросе SQL Server не решит вашу проблему - вам нужны все данные, возвращаемые исходным запросом. Желаемая группировка не на уровне данных, а при отображении данных Listview поддерживает группировку - см. Эту статью из нескольких частей , в которой показано, как выполнить группировку по вашему желанию (в частности, см. Часть под названием «Группировка по полю данных» ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...