Sql-Server-2012
SQL查詢題——棘手的一題
我有兩張表,一張有一個支付資訊和一個 id (LFN),另一方面有支付位置:
單筆付款:
支付崗位:
目標是得到這樣的表:
與 our_recno 有一個匹配,通過客戶 ID 我可以找到所有相關的職位。我用一個子查詢來做到這一點。我得到的最佳解決方案是:
您知道如何重複 LFN 編號而不是 NULL 嗎?
非常感謝您的想法。
你必須建造一座你應該已經擁有的橋樑,所以你應該考慮你的設計
唯一有用且不冗餘的資訊是 LFN,老實說,將其放入 payment_positions 中,然後您可以從 payment_positions 獲得您想要的所有資訊:
CREATE TABLE [payment] ( [LFN] INTEGER, [OUR_RECNO] INTEGER, [TOTAL] FLOAT ); INSERT INTO [payment] ([LFN], [OUR_RECNO], [TOTAL]) VALUES ('1234', '36622016', '71.89'); GO
1 rows affected
CREATE TABLE [payment_positions] ( [OUR_RECNO] INTEGER, [CUSTOMER] INTEGER, [TOTAL] FLOAT ); INSERT INTO [payment_positions] ([OUR_RECNO], [CUSTOMER], [TOTAL]) VALUES ('36617800', '2566303', '47.34'), ('36622016', '2566303', '10.51'), ('36625936', '2566303', '14.04'); GO
3 rows affected
SELECT [CUSTOMER],[OUR_RECNO] FROM [payment_positions] WHERE [OUR_RECNO] IN (SELECT [OUR_RECNO] FROM [payment] )
CUSTOMER | OUR_RECNO -------: | --------: 2566303 | 36622016
SELECT r.[LFN], ac.[OUR_RECNO], ac.[CUSTOMER], ac.[TOTAL] FROM [payment] AS r INNER JOIN (SELECT [CUSTOMER],[OUR_RECNO] FROM [payment_positions] WHERE [OUR_RECNO] IN (SELECT [OUR_RECNO] FROM [payment] )) AS t1 ON r.[OUR_RECNO] = t1.[OUR_RECNO] INNER JOIN [payment_positions] AS ac ON ac.[CUSTOMER] = t1.[CUSTOMER]
LFN | OUR_RECNO | CUSTOMER | TOTAL ---: | --------: | -------: | ----: 1234 | 36617800 | 2566303 | 47.34 1234 | 36622016 | 2566303 | 10.51 1234 | 36625936 | 2566303 | 14.04
db<>在這裡擺弄