2014-10-14 3 views
-1

모든 테이블의 모든 일치하는 행을 U_ID 열을 기반으로 세 개의 개별 테이블에있는 모든 열을 포함하는 네 번째 MergedTable으로 결합해야하는 SQL Server에 세 개의 테이블이 있습니다.SQL Server 데이터를 효율적으로 병합하는 방법은 무엇입니까?

저장 프로 시저에서 T-SQL을 통해이 작업을 수행하는 방법이 있습니까? 아니면 C#에서 루프 함수를 만들어야합니까?

결론은 웹 사이트의 명령에서 실행되기 때문에 MVC 프로젝트 나 구성 요소에 캡슐화 할 수 있어야합니다.

다음은 표의 예입니다.

표 1

U_ID  ClientNumber OrderDate Amount 
--------------------------------------------- 
BB000Kw 1920384  5/14/2013 1093.39 
AA000bM 3839484  12/8/2012 584.42 
AA000gH 8294848  2/28/2014 4849.38 
AA000md 3849484  4/31/2013 590.84 
AA000mF 3998398  3/29/2013 448.82 
AA000mG 9944848  11/28/2014 98.85 
AA000mn 0292938  10/31/2012 300.48 

표 2

U_ID  Name     Date 
------------------------------------------ 
AA000bM "Krivis, Jeffrey" 7/1/2002 
AA000bv "Saydah, Michael" 7/30/2002 
AA000cA "Byrne, Richard"  4/21/2003 
AA000dd "McNeil, Joseph"  6/10/2003 
AA000dH "Greenberg, Arnold" 1/16/2003 
AA000gH "Rich, Elwood"  7/5/2003 
AA000id "O'Neill, Robert J." 11/20/2002 
AA000jf "Patsey, Richard" 4/22/2003 
AA000jr "Jones, Arthur"  7/1/2002 
AA000jU "Toff, Ronald"  7/15/2002 
AA000k4 "Anderson, Carl"  8/14/2002 
BB000Kw "Wilson, Sam"  3/9/2003 

표 3 : 병합 된 테이블을 생성

U_ID  Name 
----------------------------- 
AA000bM Acme Company 
AA000jr Stockwell Industries 
BB000ke Gensen Motors 
BB999di Falstaff Cards 
BB000dl B and R Printing 
BB000Kw Go Golf Carts 
AA000gH Rich's Sandwiches 

U_ID  ClientNumber OrderDate Amount  CustomerName   JoinDate  CompanyName 
------------------------------------------------------------------------------------------------------- 
BB000Kw 1920384  5/14/2013 1093.39 "Wilson, Sam"  3/9/2003  Go Golf Carts 
AA000bM 3839484  12/8/2012 584.42  "Krivis, Jeffrey" 7/1/2002  Acme Company 
AA000gH 8294848  2/28/2014 4849.38 "Rich, Elwood"  7/5/2003  Rich's Sandwiches 

표 1은 다른 테이블과 일치하는 마스터 테이블입니다. 결과에서 표 1과 일치하는 테이블을 기반으로 모든 테이블의 하위 집합 만 표시됩니다.

MVC를 Entity Framework 6 및 Linq-to-Entities와 함께 사용할 예정이지만 T-SQL 스크립트가 더 효율적이라면 대신 아마 그 스크립트를 사용해야합니다.

이 결과를 얻는 가장 좋은 방법은 무엇입니까?

+2

무엇 ? –

+0

어떤 크기의 데이터 세트를보고 있습니까? 예 : 표당 행 수는 얼마입니까? – ps2goat

답변

1

새 테이블을 만들려면 SELECT ... INTO ... FROM ... 쿼리를 사용할 수 있습니다. 귀하의 경우 그 결과는 다음과 같습니다

SELECT t1.U_ID, t1.ClientNumber, t1.OrderDate, t1.Amount, 
     t2.Name as CustomerName, t2.Date as JoinDate, 
     t3.Name as CompanyName 
INTO dbo.ResultingMergedTable 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.U_ID = t2.U_ID 
INNER JOIN Table3 t3 ON t1.U_ID = t3.U_ID 

는 정말 큰 데이터 테이블을보고하는 경우이 실행 시간이 많이 걸릴 것이라는 점을 명심하십시오.

+0

왼쪽 외부 조인을 사용하는 것이 좋습니다. 자식 테이블에없는 레코드를 놓치게됩니다. – mannyyysh

+0

@mannyyysh INNER 또는 LEFT 조인인지 여부는 설명에서 분명하지 않습니다. 그것은 '표 1은 다른 표와 일치하는 주인표입니다'라고 말하면서 마치 내 기분 인 것처럼 보이지만 잘못 될 수 있다고 말합니다 – dotnetom

0

언급 한 것을 수행하기 위해 4 번째 테이블을 만들 수 있지만 SQL을 사용하는 경우 동일한 작업을 수행 할 뷰를 만들 수 있습니다. 뷰는 가상 테이블입니다. 우리는 데이터를 분할 할 때뿐만 아니라 위에서 설명한 것처럼 세부적인 레코드를 만들 때 이것을 사용합니다. 조인 또는 그 대신, 표준화를 유지하고 테이블 대신 뷰를 사용에 대한

http://msdn.microsoft.com/en-us/library/ms187956.aspx

http://www.sqlinfo.net/sqlserver/sql_server_VIEWS_the_basics.php

CREATE VIEW DetailView AS 
(
    SELECT 
    -- table1 
    t1.U_ID, 
t1.ClientNumber, 
t1.OrderDate, 
t1.Amount, 
-- table2 
t2.Name, 
t2.Date as [JoinDate], 
-- table3 
t3.Name as [Company] 
    FROM 
    table1 t1 
    LEFT JOIN 
    table2 t2 
    ON t1.U_ID = t2.U_ID 
LEFT JOIN 
    table3 t3 
    ON t1.U_ID = t3.U_ID 
    WHERE 
     t1.U_ID = t2.U_ID 
    and 
    t1.U_ID = t3.U_ID 
) 
관련 문제