T-SQL เทียบเท่ากับ Python Pandas Concatenate

Oct 24 2020

ฉันมีสองสามตารางที่ฉันต้องการรวมในลักษณะเดียวกับที่Python Pandas Concatenateทำ ฉันไม่ต้องการจำลองข้อมูลเนื่องจากมีขนาดค่อนข้างใหญ่ ฉันอยากมีVIEWพฤติกรรมแบบนี้ ให้ฉันอธิบายโดยใช้ตัวอย่างปลอมที่เท่าที่ฉันรู้ว่าจะไม่ได้ผล แต่เพียงเพื่ออธิบายอย่างถูกต้องว่าฉันต้องการบรรลุอะไร

สมมติว่าฉันมีสองตารางนี้:

CREATE TABLE table_1 (
    [a] [bigint] NOT NULL,
    [b] [bigint] NOT NULL,
    [c] [varchar] (32) NULL,
    [d] [bigint] NULL,
)
GO

CREATE TABLE table_2 (
    [a] [bigint] NOT NULL,
    [b] [bigint] NOT NULL,
    [c] [varchar] (32) NULL,
    [e] [varchar](256) NULL,
)
GO

ที่ไหนa, b, cเทียบเท่า แต่เก็บข้อมูลต่างกัน dที่มีอยู่ในtable_1แต่ไม่ได้อยู่ในtable_2และeอยู่ในแต่ไม่ได้อยู่ในtable_2table_1

ตารางไม่เก็บข้อมูลทั่วไปใด ๆ นั่นคือJOINในเขตข้อมูลใด ๆ จะให้ผลลัพธ์เป็นศูนย์

ฉันต้องการที่จะทำสิ่งต่อไปนี้ (หรือสิ่งที่เทียบเท่ามากกว่าฉันรู้ว่าสิ่งที่ฉันแสดงนั้นไม่สามารถทำได้):

CREATE VIEW MyUnion FROM(
SELECT * FROM table_1 UNION SELECT * FROM table_2) AS alldata;

ในลักษณะที่ถ้าฉันวิ่ง:

SELECT * FROM MyUnion;

และจะได้สิ่งที่ต้องการ ( 1และOneเป็นเพียงฟิลเลอร์ที่แสดงถึงตัวเลขหรือสตริงทั่วไป):

a       b       c       d       e
1       1       One     1       NULL
1       1       One     NULL    One

มีวิธีใดบ้างที่จะทำสิ่งนี้โดยไม่ต้องทำซ้ำข้อมูล? (เช่นการสร้างตารางอื่นที่มีทุกอย่าง)

ขอบคุณ!

คำตอบ

7 ypercubeᵀᴹ Oct 23 2020 at 22:35

อะไรทำนองนี้:

CREATE VIEW MyUnion AS
SELECT
    a, b, c,
    d,
    CAST(NULL AS varchar(32)) AS e 
FROM table_1 
UNION ALL
SELECT
    a, b, c, 
    CAST(NULL AS bigint) AS d,
    e
FROM table_2 ;