쿼리를 수행하는 데 문제가 있습니다. 나는 두 개의 테이블을 가지고 있는데 하나는 요소 정보를 가지고 있고 다른 하나는 첫 번째 테이블의 요소와 관련된 레코드를 가지고있다. 아이디어는 요소 정보와 여러 레코드 정보를 같은 행에 얻는 것입니다.서브 쿼리를 재사용 할 수 있습니까?
구조는 다음과 같이 설명 될 수있다 :
table [ id, name ]
[1, '1'], [2, '2']
table2 [ id, type, value ]
[1, 1, '2009-12-02']
[1, 2, '2010-01-03']
[1, 4, '2010-01-03']
[2, 1, '2010-01-02']
[2, 2, '2010-01-02']
[2, 2, '2010-01-03']
[2, 3, '2010-01-07']
[2, 4, '2010-01-07']
을 그리고 이것은 내가 달성하고자하려는 것입니다 :
result [id, name, Column1, Column2, Column3, Column4]
[1, '1', '2009-12-02', '2010-01-03', , '2010-01-03']
[2, '2', '2010-01-02', '2010-01-02', '2010-01-07', '2010-01-07']
다음 쿼리는 올바른 결과를 얻을 수 있지만, 그것은 나에게 매우 비효율적 인 것 같습니다 , 각 열에 대해 table2를 반복해야합니다. 어쨌든 하위 쿼리를 수행하고 다시 사용할 수 있습니까?
SELECT
a.id,
a.name,
(select min(value) from table2 t where t.id = subquery.id and t.type = 1 group by t.type) as Column1,
(select min(value) from table2 t where t.id = subquery.id and t.type = 2 group by t.type) as Column2,
(select min(value) from table2 t where t.id = subquery.id and t.type = 3 group by t.type) as Column3,
(select min(value) from table2 t where t.id = subquery.id and t.type = 4 group by t.type) as Column4
FROM
(SELECT distinct id
FROM table2 t
WHERE (t.type in (1, 2, 3, 4))
AND t.value between '2010-01-01' and '2010-01-07') as subquery
LEFT JOIN table a ON a.id = subquery.id
이가 어떤 데이터베이스입니다? 그리고 어떤 데이터베이스 버전 (예 : SQL Server 2000, 2005 또는 2008?) –
[sql에서 하위 쿼리를 다시 사용하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/14987317/how-to-reuse -a-sub-query-in-sql) –