我有这张桌子
表1
AccountID TrackNumber TransactionDate
MNL001 10001 20151101
MNL002 10002 20151102个
MNL003 10003 20151103
MNL004 10004 20151102个
MNL005 10005 20151101
MNL006 10006 20151101个
MNL007 10007 20151103
MNL008 10008 20151102个
MNL009 10009 20151101
MNL010 10010 20151103个
我希望得到那些没有交易的AccountID。
输出应该是:TransationDate AccountID
20151101 MNL002
20151101 MNL003
20151101 MNL004
20151101 MNL007
20151101 MNL008
20151101 MNL010
20151102 MNL001
20151102 MNL003
20151102 MNL005
20151102 MNL006
20151102 MNL007
20151102 MNL009
20151102 MNL010
20151103 MNL001
20151103 MNL002
20151103 MNL004
20151103 MNL005
20151103 MNL006
20151103 MNL008
20151103 MNL009
请帮我在MS SQL 2008中进行此查询。
感谢
这是我的分析
问题是我不知道如何在查询中这样做。
答案 0 :(得分:1)
您可以使用CROSS APPLY
,如下所示:
SELECT DISTINCT A.TransationDate, B.AccountID
FROM Your_Table A
CROSS APPLY (
SELECT AccountID FROM Your_Table WHERE TransationDate <> A.TransationDate
) AS B
答案 1 :(得分:0)
有许多可能的解决方案。 一种解决方案可能是:
Select t.TransactionDate, t.AccountID
From table1 t
Where not exists
(select *
from table1 t2
where
t2.AccountID = t1.AccountID
and t1.TransactionDate = t2.TransactionDate
)
答案 2 :(得分:0)
在不同日期和帐户之间执行cross join
,并使用left join
搜索表格中的非现有值:
DECLARE @t TABLE
(
AccountID VARCHAR(10) ,
TrackNumber VARCHAR(10) ,
TransactionDate DATE
)
INSERT INTO @t
VALUES ( 'MNL001', '10001', '20151101' ),
( 'MNL002', '10002', '20151102' ),
( 'MNL003', '10003', '20151103' ),
( 'MNL004', '10004', '20151102' ),
( 'MNL005', '10005', '20151101' ),
( 'MNL006', '10006', '20151101' ),
( 'MNL007', '10007', '20151103' ),
( 'MNL008', '10008', '20151102' ),
( 'MNL009', '10009', '20151101' ),
( 'MNL010', '10010', '20151103' )
;WITH distinctAccounts AS(SELECT DISTINCT AccountID FROM @t),
distinctDates AS(SELECT DISTINCT TransactionDate FROM @t)
SELECT dd.TransactionDate, da.AccountID
FROM distinctAccounts da
CROSS JOIN distinctDates dd
LEFT JOIN @t t ON t.AccountID = da.AccountID AND t.TransactionDate = dd.TransactionDate
WHERE t.AccountID IS NULL
ORDER BY dd.TransactionDate, da.AccountID
输出:
TransactionDate AccountID
2015-11-01 MNL002
2015-11-01 MNL003
2015-11-01 MNL004
2015-11-01 MNL007
2015-11-01 MNL008
2015-11-01 MNL010
2015-11-02 MNL001
2015-11-02 MNL003
2015-11-02 MNL005
2015-11-02 MNL006
2015-11-02 MNL007
2015-11-02 MNL009
2015-11-02 MNL010
2015-11-03 MNL001
2015-11-03 MNL002
2015-11-03 MNL004
2015-11-03 MNL005
2015-11-03 MNL006
2015-11-03 MNL008
2015-11-03 MNL009