2010-03-11 2 views
1

변경 요청 데이터베이스에 대해 실행되는 다음 SQL 코드가 있습니다. 각 레코드에는 영향을받은 미국 지역을 나타내는 여러 열이 있습니다. 변경이 region에 영향을주는 경우, 값은 1이되고 그렇지 않으면 NULL이됩니다. 그래서 결정하기 위해 각 열에있는 값을 추가하고 하나 개 이상의 영역이 영향을받는 경우, 대답은 수 1보다 큰T-SQL : CASE 및 COALESCE를 사용하여 여러 열의 데이터를 하나의 출력 열로 표시

내 유착를 변경하는 방법에 도움이 필요 및/또는 것

CASE 문은 "Affected_Area"출력에 값이 1 인 영향을받는 모든 영역을 나열합니다.

영향을받는 지역 지난 7 일이


SELECT ID, 
(ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0) + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)), 
Affected_Area = COALESCE(
CASE WHEN [allregions]=1 THEN 'All Regions' ELSE NULL END, 
CASE WHEN [midamerica]=1 THEN 'Mid-America' ELSE NULL END, 
CASE WHEN [northcentral]=1 THEN 'North Central' ELSE NULL END, 
CASE WHEN [northeast]=1 THEN 'Northeast' ELSE NULL END, 
CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest' ELSE NULL END, 
CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest' ELSE NULL END, 
CASE WHEN [southeast]=1 THEN 'Southeast' ELSE NULL END 
), 
FROM [DB_Reporting].[dbo].change c with (nolock) 
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110))) 

어떤 도움에 감사드립니다! 이 같은

행크 스톨 링스

+3

원하는 출력은 무엇입니까? – RedFilter

+0

지역별로 한 행 또는 영향을받는 모든 지역이 한 행에 쉼표로 구분 된 한 행을 원하십니까? – van

답변

1

시도 뭔가 :

SELECT ID, 
    (ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0) + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)), 
    Affected_Area = 
     CASE WHEN [allregions]=1 THEN 'All Regions, ' ELSE '' END + 
     CASE WHEN [midamerica]=1 THEN 'Mid-America, ' ELSE '' END + 
     CASE WHEN [northcentral]=1 THEN 'North Central, ' ELSE '' END + 
     CASE WHEN [northeast]=1 THEN 'Northeast, ' ELSE '' END + 
     CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest, ' ELSE '' END + 
     CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest, ' ELSE '' END + 
     CASE WHEN [southeast]=1 THEN 'Southeast' ELSE '' END 
FROM [DB_Reporting].[dbo].change c with (nolock) 
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110)))  

당신은 가능성이 후행 쉼표를 손질해야합니다.

+0

OrbMan, 답장을 보내 주셔서 감사합니다 ... 내가 준 코드 예제를 시도하고 "All Regions"만 채 웁니다 ... 다른 사람들은 NULL 결과를 반환합니다. 동남, 동북 내가 모든 지역이있을 때, 당신은 다른 사람을 원하지 않는 가정입니다 감사합니다, –

+0

을 : 그것은 multple 지역을 나열 할 때 내가 좋아하는 것이 무엇 좋아 포맷하는 것입니다. 귀하의 요구 사항은이 시점에서 불분명합니다. – RedFilter

+0

업데이트 된 쿼리를 사용해보십시오. – RedFilter

0

이 테이블의 디자인을 변경하는 데 어려움이 있습니까? 그것은 정확하지 않은 것 같습니다 - FK가있는 지역 열을 지역 표로 선택하는 것이 좋습니다. 다른 지역을 추가해야한다면 위의 내용으로 무엇을 할 것인가 ...

그렇지 않으면 PIVOT 명령을 사용하여 쿼리에 사용할 수있는보다 정규화 된보기를 만들 수 있습니다.

+0

아니요. 나는 그것에 대해서만 질의를 할 수 있습니다. 나는 PIVOT 명령을 사용한 적이 없다. 코드를 기반으로 예제를 제공 할 수 있습니까? 응답 해 주셔서 감사합니다. –

관련 문제