标题MSSQL下的组值

时间:2011-04-26 08:20:26

标签: asp.net sql listview group-by

我想将不同“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   ...........

现在我试图通过他们的id一起在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 :(得分:0)

在SQL Server查询中使用GROUP BY无法解决您的问题 - 您需要原始查询返回的所有数据。所需的分组不是在数据级别,而是在显示数据时。 Listview确实支持分组 - 请参阅此multi-part article,说明如何根据需要进行分组(具体请参阅标题为"Grouping By a Data Field"的部分)。

答案 1 :(得分:0)

首先,您得到的错误是因为group by子句中的所有列必须位于select子句中(如果它不是聚合列)。

然而,这不会给你你想要的结果。您应该做的是在数据网格中添加摘要行,this应该为您提供所需的内容。

另请查看here以了解您的不同选项。