2013-10-15 1 views
2

T-SQL과 Microsoft SQL Server를 사용하고 있습니다. 나는 다른 테이블을 가지고 있고 나는 예에서와 같이 특정 결과를 얻을 싶습니다T-SQL, 목록 만들기

나는 3 "레시피"다른 성분을 포함하는 테이블이 : 나는 또한 테이블 주이

|Recipe X|  |Recipe Z|  |Recipe V| 
__________  __________  __________ 
A    A    B 
B    D    E 
C    F    C 

을 :

Mon||Tue||Wed||Thu||Fri||Sat||Sun 
--------------------------------- 
X | Z | X | V | Z | V | V 

각 요일마다 제조법이 있습니다. 내가 (... 화요일은 2, 월요일의 위치가 1 예를 들어) 어느 날 및 처방에 위치를 찾을 싶습니다

그래서 것이다 외모

같은 레시피 X : (1, 3)

레시피 Z : (2, 5)

레시피 V (4, 6, 7) 나는 T-SQL 에 목록을 할 수있는 방법을 찾을 수 없습니다

가있는 경우 이런 식으로하는 또 다른 방법은?

감사합니다.

답변

1

사용중인 테이블 구조에 따라 다소 복잡한 쿼리가 만들어 지므로 테이블을 정규화하기 위해 @ podiluska의 권장 사항을 살펴보아야합니다.

즉, cte (or Common Table Expression)을 사용하면 기본적으로 "런타임시 정규화를 수행"할 수 있으며 결과를 얻기 위해 정기적 인 쿼리를 수행 할 수 있습니다.

WITH cte AS (
    SELECT '1' day, Mon Recipe FROM Week UNION ALL 
    SELECT '2' day, Tue Recipe FROM Week UNION ALL 
    SELECT '3' day, Wed Recipe FROM Week UNION ALL 
    SELECT '4' day, Thu Recipe FROM Week UNION ALL 
    SELECT '5' day, Fri Recipe FROM Week UNION ALL 
    SELECT '6' day, Sat Recipe FROM Week UNION ALL 
    SELECT '7' day, Sun Recipe FROM Week 
) 
SELECT DISTINCT 'Recipe_' + Recipe AS Recipe, 
    Days=STUFF((SELECT ','+day FROM cte WHERE Recipe=A.Recipe FOR XML PATH('')), 
                    1 , 1 , '') 
FROM 
    cte A 

An SQLfiddle to test with.

+0

감사합니다. 결과를 테이블에 넣으려고하는데 어려움을 겪습니다. SET @ var = select distinct ...를 할 수 있습니까? 아니면 다른 방법으로 작성해야합니까? – usertfwr

1

예. 주일 테이블에 일, 조리법 및 위치 필드가 있도록 표준화하십시오.

Mon X 1 
Tue Z 2 

다음은 간단한 쿼리

select position 
from table 
where recipe = 'z' 

당신이 원하는 양로원하여 일 이름과 위치, 또는 그 반대를 계산할 수있다.