Sql-Server-2012

SQL查詢題——棘手的一題

  • September 6, 2020

我有兩張表,一張有一個支付資訊和一個 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<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/275048