Требуется помощь в подсчете запросов - PullRequest
3 голосов
/ 30 декабря 2010

У меня есть пользователи с исправлением 28 Элементы списка проверок, в которых пользователь ежедневно должен вводить значение перед каждым элементом списка проверок.

Пользователи иногда частично заполняют список или оставляют его неполным, поэтому мне нужно показать им, что выоставили контрольный список НЕПРАВИЛЬНЫМ или заполненным ЧАСТИЧНО, поэтому ведение поля с именем «trans_status», которое по умолчанию заносится в базу данных с 0, означает «незавершенный», и как только пользователь заполняет данные, значение получает 1, а 28 записей смешивают 1 и 0, это означает «ЧАСТИЧНЫЙ иесли все 28 значений имеют 0, значит НЕПОЛНО, а если все 1 означает ЗАВЕРШЕНО.

Вот структура

CREATE TABLE [dbo].[VTRCheckListDetails](
    [userid] [int] NULL,
    [branchid] [int] NULL,
    [vtrRespDate] [date] NULL,
    [CLid] [int] NULL,
    [VtrValue] [varchar](5) NULL,
    [trans_status] [int] NULL,
    [last_updated] [int] NULL
 ) ON [PRIMARY]

А вот пример данных

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','1','1','1','0')

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','2','2','0','0')    

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','3','3','0','0')      

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','4','4','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','5','5','0','0')     

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','6','6','0','0')  

 INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','7','7','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','8','8','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','9','9','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','10','10','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','11','11','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','12','12','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','13','13','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','14','14','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','15','15','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','16','16','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','17','17','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','18','18','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','19','19','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','20','20','0','0')  

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','21','21','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','22','22','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','23','23','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','24','24','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','25','25','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','26','26','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','27','27','0','0')   

INSERT VTRCheckListDetails(userid,branchid,vtrRespDate,CLid,VtrValue,trans_status,last_updated)       VALUES('144','14','2010-12-30','28','28','0','0')   

Чтоя хочу, чтобы, когда я запускаю запрос, он должен группироваться по датам и отображать данные, подобные этим, на основе trans_status

Date.............Status
30-12-12..........Partial (can be complete, incomplete)

Ответы [ 2 ]

3 голосов
/ 30 декабря 2010
SELECT   userid     ,
         vtrRespDate,
         CASE
                  WHEN MAX(trans_status) = 0
                  THEN 'InComplete'
                  WHEN MIN(trans_status)=1
                  THEN 'Complete'
                  ELSE 'Partial'
         END AS status
FROM     VTRCheckListDetails
GROUP BY userid,
         vtrRespDate
2 голосов
/ 30 декабря 2010
SELECT  vtrRespDate,
        CASE COUNT(CASE trans_status WHEN 1 THEN 1 END)
        WHEN 0 THEN
                'Incomplete'
        WHEN COUNT(*) THEN
                'Complete'
        ELSE
                'Partial'
        END AS Status
FROM    VTRCheckListDetails
GROUP BY
        vtrRespDate
...