2013-02-05 3 views
0

SQL Server Management Studio 2008에서 작성하려고하는 쿼리에 대한 질문입니다. 2 행을 가져옵니다. 첫 번째 행은 헤더 정보이고, 두 번째 행은 특정 품목에 대한 정보입니다. 실제 머리글 정보는 "열 0, 1, 2, 3, 4, .... 등"으로 읽습니다.값이 없으면 열의 표시를 어떻게 제외합니까?

ROW 1: Model # | Item Description| XS | S | M | L | XL| 
ROW 2: 3241 | Gray Sweatshirt| | 20 | 20 | 30 | | 

는 기본적으로이 20 스몰, 20 개 매체,이 특정 항목의 30 개 라지가 있다는 것을 보여줍니다

데이터는 다음과 같이 보인다. XS 또는 XL이 없습니다.

이 정보를 한 행에 넣는 하위 쿼리를 만들려고하지만 XS 및 XL 크기 아래에 표시된대로 양을 공백으로 채우지 마십시오.

나는 모두가 말하고 완료되면이 같이 할 :

ROW 1: MODEL #| 3241 | ITEM DESCRIPTION | Gray Sweatshirt | S | 10 | M | 20 | L | 30 | 

공지 사항은 더 XS가 없거나 XL의이 포함되어 있습니다. 열이 나타나지 않도록하려면 어떻게해야합니까?

+2

null을 포함하는 사용중인 쿼리를 게시하십시오 – Paparazzi

+4

데이터를 가져 오기 위해 쿼리에 너무 많은 프리젠 테이션 논리 *가있는 것처럼 보입니다. 더 나은 솔루션은 데이터베이스가 원시 형식화되지 않은 데이터를 리턴하는 책임 만 있고, 데이터를 표시하는 응용 프로그램에 서식을 유지하는 것입니다. –

+2

@MichaelFredrickson 절대적으로 옳은가? 단지 SQL로 데이터를 가져 와서 응용 프로그램/프리젠 테이션 레이어가 데이터를 표시하는 방법에 대해 걱정할 수있게한다. 이런 종류의 일에는 SQL이 좋지 않습니다. 앱에서 처리되는 경우 성능과 사용의 용이성이 훨씬 향상 될 것입니다. – JNK

답변

0

쿼리 나 테이블 구조를 게시하지 않으므로 Id, Description, Size 열이있는 것 같습니다. 그렇다면 테이블과 열 이름으로 바꾸면됩니다.

DECLARE @columns varchar(8000)  
SELECT @columns = COALESCE (@columns + ',[' + cast(Size as varchar) + ']', '[' + cast(Size as varchar) + ']') 
      FROM YourTableName 
      WHERE  COUNT(Size) > 0 

      DECLARE @query varchar(8000) = 'SELECT Id, Description, ' 
       + @columns +' 
       FROM 
       (SELECT Id, Description, Size 
       FROM YourTableName) AS Source 
       PIVOT 
       (
        COUNT(Size) 
        FOR Size IN ('+ @columns +') 
       ) AS Pvt' 

      EXEC(@query) 

아무튼, 나는 또한 @MichaelFredickson에 동의합니다. 필자는이 피벗 솔루션을 구현했지만 SQL에서 원시 데이터를 가져온 후에 프리젠 테이션 계층에서 처리하도록하는 것이 좋습니다. 그렇지 않다면, C#/vb/other 코드로 값을 읽고 표시 할 때 SQL에서 테이블을 만들고 다른 하나는 프레젠테이션에서 데이터를 두 번 처리해야합니다.

+0

그리고 ASP.Net WebForms를 사용하여 개발하는 경우 sp를 만들어이를 코딩없이 데이터 열을 동적으로 읽는 gridview에 데이터 소스로 전달할 수 있습니다. 가장 효율적인 방법은 아니지만! – rkrdo

관련 문제