我有一张如下表格
BILL BILL_DATE TYPE AMOUNT
BILL01300002 2016-01-30 15:34:48.957 1 250.00
BILL01300003 2016-01-30 15:38:00.000 5 150.00
BILL01300004 2016-01-30 15:49:48.000 5 200.00
BILL01300002 2016-01-30 16:37:00.433 2 250.00
BILL01300004 2016-01-30 17:37:00.233 7 1000.00
BILL01300002 2016-01-30 18:42:54.927 3 250.00
BILL02020006 2016-02-02 18:42:54.927 3 550.00
我需要根据一个案例显示一个额外的列[AMOUNT2]。情况是,如果相同的BILL在同一天出现(1,2,3)中的三个特定TYPE。然后我需要为这3条记录显示与TYPE 3 Amount列相同数量的额外列。另外,额外的列将是0。
在#TAB中我们可以在BILL01300002中找到这种情况。它是在同一天发生的。 对于3种特殊的不同类型1,2,3。
我的预期结果是
BILL BILL_DATE TYPE AMOUNT AMOUNT2
BILL01300002 2016-01-30 15:34:48.957 1 250.00 250.00
BILL01300003 2016-01-30 15:38:00.000 5 150.00 0
BILL01300004 2016-01-30 15:49:48.000 5 200.00 0
BILL01300002 2016-01-30 16:37:00.433 2 250.00 250.00
BILL01300004 2016-01-30 17:37:00.233 7 1000.00 0
BILL01300002 2016-01-30 18:42:54.927 3 250.00 250.00
BILL02020006 2016-02-02 18:42:54.927 3 550.00 0
我发布架构以供参考
CREATE TABLE #TAB(BILL VARCHAR(250),BILL_DATE DATETIME, TYPE BIGINT, AMOUNT DECIMAL(18,2) )
INSERT INTO #TAB
SELECT 'BILL01300002','2016-01-30 15:34:48.957',1, 250
UNION ALL
SELECT 'BILL01300003','2016-01-30 15:38:00.000',5, 150
UNION ALL
SELECT 'BILL01300004','2016-01-30 15:49:48.000',5, 200
UNION ALL
SELECT 'BILL01300002','2016-01-30 16:37:00.433',2, 250
UNION ALL
SELECT 'BILL01300004','2016-01-30 17:37:00.233',7, 1000
UNION ALL
SELECT 'BILL01300002','2016-01-30 18:42:54.927',3, 250
UNION ALL
SELECT 'BILL02020006','2016-02-02 18:42:54.927',3, 550
答案 0 :(得分:2)
SELECT *,
( CASE B.BILL
WHEN (SELECT A.BILL
FROM #TAB AS A
WHERE TYPE IN( 1, 2, 3 )
GROUP BY A.BILL
HAVING Count(A.BILL) >= 3) THEN amount
ELSE 0
END ) AS amount2
FROM #TAB AS B
:)希望能帮到你
答案 1 :(得分:1)
你可以这样试试,
private void deleteImageFromStorage(String imageName) {
FileSystemStorage fss = FileSystemStorage.getInstance();
fss.deleteRetry(fss.getAppHomePath() + imageName, 2);
}
for (int i = 0; i < myTop10NewsLowestId; i++) {
deleteImageFromStorage("largeImage_" + i + ".jpg");
}
答案 2 :(得分:0)
尝试下面提到的代码 -
SELECT b.*
,(
CASE
WHEN a.amount IS NOT NULL
THEN a.amount
END
)
FROM (
SELECT b.*
FROM (
SELECT bill
,max(type) AS type
FROM TableA
WHERE type IN (
1
,2
,3
)
GROUP BY bill
,cast(bill_date AS DATE)
HAVING count(*) = 3
) AS a
RIGHT JOIN TableA AS b ON a.bill = b.bill
AND a.type = b.type
) AS a
RIGHT JOIN TableA AS b ON a.bill = b.bill
AND a.type = b.type
如果有帮助,请告诉我。