베스트오퍼
124
2017-08-22 11:48:31
4
1032

MSSQL 질문드립니다.


하다가 구글링을 어떤걸로 찾아야 하는지 나오지도 않고 해서 이렇게 올립니다


일딴 제가 원하는 결과물은

NO201520162017
1NAME1NAME1
NAME1
2NAME2NAME2
NAME2
3NAME3
NAME3
NAME3
4NAME4
NAME4
NAME4

요런 형식이고,


제가 여기까지 해봤습니다.

NO2017
1NAME1
2NAME2
3NAME3
4NAME4

SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime LIKE '2015%'  then 1 end) desc) AS NO,

   mSiteName as '2017'

FROM [MAEDP].[dbo].[ED_MINWON] 

GROUP BY mSiteName

위의 테이블의 결과 쿼리입니다.


---- 제가 원하는 결과물이 가능한지 알고 싶습니다.

0
  • 답변 4

  • mecca0515
    96
    2017-08-22 13:53:08

    SELECT
        CASE WHEN a.NO IS NULL THEN CASE WHEN b.NO IS NULL THEN c.NO ELSE b.NO END ELSE a.NO END AS NO
        , ISNULL([2017], '') AS [2017]
        , ISNULL([2016], '') AS [2016]
        , ISNULL([2015], '') AS [2015]
      FROM (
        SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2017%'  then 1 end) desc) AS NO
            , mSiteName as [2017]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) a
    FULL OUTER JOIN (
        SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2016%'  then 1 end) desc) AS NO
            , mSiteName as [2016]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) b
        ON a.NO = b.NO
    FULL OUTER JOIN (
        SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2015%'  then 1 end) desc) AS NO
            , mSiteName as [2015]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) c    
        ON b.NO = c.NO
    
    

    또는


    WITH CTE (NO) AS (
    	SELECT 1 UNION ALL
    	SELECT NO = NO + 1 FROM CTE
    	 WHERE NO < 10
    )
    SELECT 
    	a.NO
    	, ISNULL([2017], '') AS [2017]
    	, ISNULL([2016], '') AS [2016]
    	, ISNULL([2015], '') AS [2015]
      FROM CTE a
    LEFT JOIN (
    	SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2017%'  then 1 end) desc) AS NO
            , mSiteName as [2017]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) b
    	ON a.NO = b.NO
    LEFT JOIN (
    	SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2016%'  then 1 end) desc) AS NO
            , mSiteName as [2016]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) c
    	ON a.NO = c.NO
    LEFT JOIN (
    	SELECT TOP 10
            ROW_NUMBER() OVER(ORDER BY COUNT(case when mStartTime 
                 LIKE '2015%'  then 1 end) desc) AS NO
            , mSiteName as [2015]
           FROM [MAEDP].[dbo].[ED_MINWON] 
        GROUP BY mSiteName
    ) d
    	ON a.NO = d.NO



  • 베스트오퍼
    124
    2017-08-22 14:12:15 작성 2017-08-22 14:15:39 수정됨

    정말 답변 감사합니다!!

    잘 나옵니다~~~~~

    근데 맨 첫 열인 no가 1~10 이 아닌  

    4,7,8,5,6,2,9,1,3,10 이런 순서로 나오는데 어느 부분을 손보면 되나요?

  • mecca0515
    96
    2017-08-22 14:37:22

    마지막 줄에 아래를 추가해주세요.

    1번 쿼리일 경우 : ORDER BY CASE WHEN a.NO IS NULL THEN CASE WHEN b.NO IS NULL THEN c.NO ELSE b.NO END ELSE a.NO END


    2번 쿼리일 경우 : ORDER BY a.NO

  • 베스트오퍼
    124
    2017-08-22 14:40:16

    감사합니다~~ 

  • 로그인을 하시면 답변을 등록할 수 있습니다.