CREATE TABLE `a1` (
`a` INT(11) NOT NULL,
`x` INT(11) NULL DEFAULT NULL,
`y` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`a`)
)
CREATE TABLE `b1` (
`a` INT(11) NOT NULL,
`b` VARCHAR(50) NOT NULL
`z` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`a`, `b`)
)
INSERT INTO `a1` (`a`, `x`, `y`) VALUES (1, 1453, 1234);
INSERT INTO `b1` (`a`, `b`, `z`) VALUES (1, j, 4727);
INSERT INTO `b1` (`a`, `b`, `z`) VALUES (1, k, 2435);
우와같이 두개의 테이블과 데이터가 있습니다.
이걸 아래처럼 출력하고싶습니다.[테이블을 만들 필요는 없고 결과 데이터만 필요]
CREATE TABLE `c1` ( `a` INT(11) NOT NULL, `x` INT(11) NULL DEFAULT NULL, `y` INT(11) NULL DEFAULT NULL, `j` VARCHAR(50) NOT NULL, `k` VARCHAR(50) NOT NULL PRIMARY KEY (`a`))
INSERT INTO `c1` (`a`, `x`,
`y` ,`z`,`j` ,`k` ) VALUES (1, 1453,1234,4727,2435);
즉 키a의 같은 데이터를 찿아서,
b1의 b값들을 임시테이블c1의 열로 추가,
c1 임시테이블의 내용을 출력.
문제는 a1.a의 값에 따라서 b1.b 값,행수 가 다릅니다
대충 아래처럼요
CREATE TABLE `d1` ( `a` INT(11) NOT NULL, `x` INT(11) NULL DEFAULT NULL, `y` INT(11) NULL DEFAULT NULL, `j` VARCHAR(50) , `k` VARCHAR(50),`l` VARCHAR(50),`m` VARCHAR(50),`n` VARCHAR(50), PRIMARY KEY (`a`));
INSERT INTO `d1`
VALUES (1 , 1453 ,1234 ,4727 ,2435 ,NULL ,NULL ,NULL );
INSERT INTO `d1`
VALUES (2 , 3672 ,NULL ,NULL ,7474 ,2525 ,NULL ,69865 );
INSERT INTO `d1`
VALUES (3 , 1453 ,1234 ,NULL ,NULL ,NULL ,NULL ,NULL );
어떻게 해야 같은 키값의 내용을 보기 편하게 출력할수 있을까요?
Comment 1
-
철스
2014.10.14 17:43
여러 가지의 방법이 있겠지만 아래 쿼리 참고해 보세요..
저보다 고수분들이 더 좋은 방법을 알려주실꺼에요 ㅎ
CREATE TABLE DBO.A1 (
A INT NOT NULL,
X INT NULL DEFAULT NULL,
Y INT NULL DEFAULT NULL,
)
ALTER TABLE DBO.A1 ADD CONSTRAINT PK_A1 PRIMARY KEY(A)
CREATE TABLE DBO.B1 (
A INT NOT NULL,
B VARCHAR(50) NOT NULL,
Z INT NULL DEFAULT NULL,
)
ALTER TABLE DBO.B1 ADD CONSTRAINT PK_B1 PRIMARY KEY(A, B)
INSERT INTO DBO.A1 (A, X, Y) VALUES (1, 1453, 1234);
INSERT INTO DBO.A1 (A, X, Y) VALUES (2, 1454, 1235);
INSERT INTO DBO.A1 (A, X, Y) VALUES (3, 1455, 1236);
INSERT INTO DBO.B1 (A, B, Z) VALUES (1, 'J', 4727);
INSERT INTO DBO.B1 (A, B, Z) VALUES (1, 'K', 2435);
INSERT INTO DBO.B1 (A, B, Z) VALUES (1, 'L', 2436);
INSERT INTO DBO.B1 (A, B, Z) VALUES (1, 'M', 2437);
INSERT INTO DBO.B1 (A, B, Z) VALUES (1, 'N', 2438);
INSERT INTO DBO.B1 (A, B, Z) VALUES (2, 'J', 47211);
INSERT INTO DBO.B1 (A, B, Z) VALUES (2, 'K', 24311);
INSERT INTO DBO.B1 (A, B, Z) VALUES (2, 'L', 24311);
INSERT INTO DBO.B1 (A, B, Z) VALUES (3, 'J', 47222);
INSERT INTO DBO.B1 (A, B, Z) VALUES (3, 'M', 24322);
INSERT INTO DBO.B1 (A, B, Z) VALUES (3, 'N', 24322);
DECLARE @COL NVARCHAR(100)
DECLARE @SQL NVARCHAR(1000)
SET @COL = ''
SELECT @COL = @COL + '[' + B + '], '
FROM ( SELECT DISTINCT B FROM DBO.B1 ) AS A
SET @COL = LEFT(@COL, LEN(@COL) - 1)
--SELECT @MQUERY
SET @SQL = '
SELECT
A.*, '+ @COL +'
FROM DBO.A1 AS A WITH (NOLOCK)
INNER JOIN (
SELECT *
FROM DBO.B1
PIVOT (MAX(Z) FOR B IN ('+ @COL +')) AS A
) AS B
ON A.A = B.A
'
EXEC (@SQL)