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