linq to sql - How to write Sql or LinqToSql for this scenario? -


how write sql or linqtosql scenario?

a table has following data:

id  username  price      date      status   1   mike    2   2010-4-25 0:00:00   success 2   mike    3   2010-4-25 0:00:00   fail 3   mike    2   2010-4-25 0:00:00   success 4   lily    5   2010-4-25 0:00:00   success 5   mike    1   2010-4-25 0:00:00   fail 6   lily    5   2010-4-25 0:00:00   success 7   mike    2   2010-4-26 0:00:00   success 8   lily    5   2010-4-26 0:00:00   fail 9   lily    2   2010-4-26 0:00:00   success 10  lily    1   2010-4-26 0:00:00   fail 

i want summary result data, result should be:

username    date   totalprice   totalrecord  successrecord  failrecord  mike      2010-04-25    8            4            2          2 lily      2010-04-25    10           2            2          0 mike      2010-04-26    2            1            1          0  lily      2010-04-26    8            3            1          2  totalprice sum(price) groupby username , date totalrecord  count(*) groupby username , date successrecord count(*) groupby username , date status='success' failrecord count(*) groupby username , date status='fail' totalrecord = successrecord  + failrecord 

the sql server 2005 database script is:

/****** object:  table [dbo].[pay]    script date: 04/28/2010 22:23:42 ******/ set ansi_nulls on go set quoted_identifier on go if not exists (select * sys.objects object_id = object_id(n'[dbo].[pay]') , type in (n'u')) begin create table [dbo].[pay](  [id] [int] identity(1,1) not null,  [username] [nvarchar](50) collate chinese_prc_ci_as null,  [price] [int] null,  [date] [datetime] null,  [status] [nvarchar](50) collate chinese_prc_ci_as null,  constraint [pk_pay] primary key clustered  (  [id] asc )with (pad_index  = off, statistics_norecompute  = off, ignore_dup_key = off, allow_row_locks  = on, allow_page_locks  = on) ) end go set identity_insert [dbo].[pay] on insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (1, n'mike', 2, cast(0x00009d6300000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (2, n'mike', 3, cast(0x00009d6300000000 datetime), n'fail') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (3, n'mike', 2, cast(0x00009d6300000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (4, n'lily', 5, cast(0x00009d6300000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (5, n'mike', 1, cast(0x00009d6300000000 datetime), n'fail') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (6, n'lily', 5, cast(0x00009d6300000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (7, n'mike', 2, cast(0x00009d6400000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (8, n'lily', 5, cast(0x00009d6400000000 datetime), n'fail') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (9, n'lily', 2, cast(0x00009d6400000000 datetime), n'success') insert [dbo].[pay] ([id], [username], [price], [date], [status]) values (10, n'lily', 1, cast(0x00009d6400000000 datetime), n'fail') set identity_insert [dbo].[pay] off 

one possible sql query be:

select    username   ,date   ,sum(price)  totalpay   ,count(*)  totalrecord   ,sum(case status when 'success' 1 else 0 end)  successrecord   ,sum(case status when 'success' 0 else 1 end)  failrecord  pay  group    username   ,date  order    date   ,username desc 

this assumes when status null, you'd add 1 failrecord.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -