2014-09-17 2 views
0

저는이 (SQL Server 2008 R2)에 상당히 매달려 있습니다.SQL Server : 하위 쿼리에서 열을 가져옴

Orders :

orderid details 
-------------------- 
1  my order 

내가 다음 사용자 정의 필드 테이블이

나는 주문라는 테이블을 가지고있다.

Custom_fields :

rel_orderid fieldname numericvalue textvalue datevalue 
----------------------------------------------------------- 
1   auction 0    My auction 
1   date  0      01/01/2014 

나는 의미가

orderid details auction  date (on one row) 
------------------------------------------------- 
1   my order my auction 01/01/2014 

희망을 얻기 위해 노력하고 있지만 열 머리글로 custom_fields 테이블을 마무리하고 만 한 가치를 가지고하는 방법을 이길거야 (텍스트 값 또는 날짜 등이 될 수 있음 - 단 1 개만 데이터가 있음)

경매 및 날짜와 읽기 양식의 필드 이름 열 및 전자 값 ach.

답변

0

이에 대한 casemax를 사용할 수 있습니다

select o.orderid, 
     o.details, 
     max(case when c.fieldname = 'auction' then textvalue end) auction, 
     max(case when c.fieldname = 'date ' then datevalue end) datevalue 
from orders o 
     join custom_fields c on o.orderid = c.rel_orderid 
group by o.orderid 
0

당신이 이러한 경우에 피벗 할 수 있습니다.

select orderid, 
     details, 
     [auction], 
     [date] 
FROM 
(
     select rel_orderid as orderid, 
      o.details, 
      fieldname, 
      (case when fieldname = 'auction' 
        then textvalue 
        when fieldname ='date' 
        then cast(datevalue AS varchar(128)) 
        end) value 
     FROM custom_fields 
     INNER JOIN orders o 
     on o.orderid = rel_orderid 
) As OrderDetails 
PIVOT 
(
     max(value) 
     for fieldname in ([auction],[date]) 
) pvt 
0

당신이 집계를 방지하려는 경우 사용하여이 작업을 수행 할 수 있습니다 조인 :

select o.orderid, o.details, a.textvalue as auction, d.datevalue as dateval 
from orders o left join 
    custom_fields a 
    on a.rel_orderid = o.orderid and a.fieldname = 'auction' left join 
    custom_fields d 
    on d.rel_orderid = o.orderid and d.fieldname = 'date'; 

left join이 일치가없는 경우에도 값 (NULL)를 제공합니다.

관련 문제