2009-10-08 34 views
8

Tôi cần tìm số lượng người đã nộp (fil_dt) tờ khai thuế trong vòng 60 ngày, với 120 ngày, trong vòng 180 ngày, hơn 180 ngày kể từ ngày kết thúc (fpe) 3 năm khác nhau (2006, 2007, 2008)Truy vấn SQL với số đếm và trường hợp

tuyên bố dưới đây sẽ cho tôi TẤT CẢ các năm tôi cần đếm cho mỗi năm và cho từng khả năng .. sao tôi có thể thực hiện điều này mà không có 2 truy vấn?

SELECT YEAR(A.FPE) AS "YEAR" 
,CASE            
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+' 
END AS "NBR MTH"         
WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31' 

tôi cần sự giúp đỡ của bạn thanks a lot

+1

đâu là TỪ? –

Trả lời

22

sau đó viết

SELECT YEAR(A.FPE) AS "YEAR", 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 
        THEN 1 Else 0 End) SixtydayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 
        THEN 1 Else 0 End) OneTwentyDayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 
        THEN 1 Else 0 End) OneEightyDayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 
        THEN 1 Else 0 End) OverOneEightyCount 
    From Table A 
    WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31' 
    Group By YEAR(A.FPE) 

Nếu bạn muốn đếm 120 ngày và đếm 180 ngày để chỉ bao gồm với những ai đang trên 60 và ít hơn 120, vv Sau đó,

 SELECT YEAR(A.FPE) AS "YEAR", 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 
        THEN 1 Else 0 End) SixtydayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 60 And 119 
        THEN 1 Else 0 End) OneTwentyDayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) Between 120 And 179 
        THEN 1 Else 0 End) OneEightyDayCount, 
     Sum(CASE WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) >= 180 
        THEN 1 Else 0 End) OverOneEightyCount 
    From Table A 
    WHERE A.FPE BETWEEN '2006-01-01' AND '2008-12-31' 
    Group By YEAR(A.FPE) 
+1

Số tiền sẽ cộng tối đa '100%': '<60' ngụ ý' <120' và hơn thế nữa. Tôi nghĩ rằng '@ op' có nghĩa là một cái gì đó như' từ 0 đến 60', 'từ 61 đến 120' và vân vân. – Quassnoi

+0

@Quassnoi, Có, Đã thêm truy vấn thứ hai để hiển thị cách thực hiện số lượng độc quyền ... Nhưng Bạn đã làm nổi bật văn bản trong nhận xét như thế nào? Vui lòng cho biết ... –

+0

'@Charles Bretana': giống như bạn làm điều đó trong các bài đăng, kèm theo văn bản vào dấu kiểm và dấu hoa thị. – Quassnoi

2

Đoàn tự do cột báo cáo trường hợp của bạn đại diện:

SELECT 
    YEAR(A.FPE) AS "YEAR", 
    CASE            
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+' 
    END AS "NBR MTH", 
    COUNT(1) AS "TOTAL" 
FROM Table 
WHERE 
    A.FPE BETWEEN '2006-01-01' AND '2008-12-31' 
GROUP BY 
    "YEAR", 
    "NBR MTH" 

Truy vấn này sẽ cung cấp cho bạn một số lượng của tất cả các bản ghi cho mỗi năm độc đáo/"NBR MTH" kết hợp.

1

Trên thực tế, hầu hết các DBMS không cho phép GROUP BY sử dụng bí danh, vì vậy nó phải được

... 
GROUP BY 
    YEAR(A.FPE), 
    CASE            
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 ' 
    WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+' 
    END 
3
SELECT CASE 
     WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 60 THEN '2 ' 
     WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 120 THEN '4 ' 
     WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) < 180 THEN '6 ' 
     WHEN DAYS(A.FIL_DT) - DAYS(A.FPE) > 180 THEN '6+' 
     END AS NBR_MTH, 
     y, 
     COUNT(a.fpe) 
FROM (
     SELECT 2006 AS y 
     UNION ALL 
     SELECT 2007 AS y 
     UNION ALL 
     SELECT 2008 AS y 
     ) 
LEFT JOIN 
     A 
ON  A.FPE >= CAST(CONCAT(y, '-01-01') AS DATETIME) 
     AND a.FPE < CAST(CONCAT(y + 1, '-01-01') AS DATETIME) 
GROUP BY 
     y, mbr_mth 

Không giống như đơn giản GROUP BY YEAR(), điều này sẽ chọn 0 ngay cả đối với các hồ sơ còn thiếu (như, nếu có được không 6+ bản ghi trong 2008)

Các vấn đề liên quan