我可以将数据转换并将值转换为复选标记吗?

时间:2014-04-25 19:57:12

标签: sql-server-2005 pivot

我一直在寻找如何做到这一点,但我还没有找到一个例子

我的数据如下:

batchid       wigitid
-------       -------
538217        MT8
538217        MT6
538217        M89A
538218        MT8
538218        M89D
538218        M90

我想翻转数据,看起来像这样:

BatchId  MT8 MT6 M89A M89D  M90
-------  --- --- ---  ----  ---
538217    *   *   *
538218    *            *     *

我可以通过光标循环记录,但我相信可能有更好的方法。

2 个答案:

答案 0 :(得分:1)

这是怎么回事。

Select *
From (
    Select batchid, wigitid, '*' wigitname
    From BATCHMAST
) As BMast
Pivot (MAX(wigitname) For WigitId In ([MT8],[MT6],[M89A],[M89D],[M90])) As Pvt

如果你不这样做,也可以在下面试试。在结果中想要null

Select batchid, 
    ISNULL([MT8],'') [MT8],
    ISNULL([MT6],'')[MT6],
    ISNULL([M89A],'')[M89A],
    ISNULL([M89D],'')[M89D],
    ISNULL([M90],'')[M90]
From (
Select batchid, wigitid, '*' wigitname
From BATCHMAST
) As BMast
Pivot (MAX(wigitname) For WigitId In ([MT8],[MT6],[M89A],[M89D],[M90])) As Pvt

答案 1 :(得分:0)

请尝试以下代码SQL Fiddle

SELECT 
  BatchID, 
  REPLACE(NULLIF(MT6,0), 1, '*') AS MT6,
  REPLACE(NULLIF(MT8,0), 1, '*') AS MT8,
  REPLACE(NULLIF(M89A,0), 1, '*') AS M89A,
  REPLACE(NULLIF(M89D,0), 1, '*') AS M89D,
  REPLACE(NULLIF(M90,0), 1, '*') AS M90
FROM 
      (
   SELECT BatchID, WigitID FROM Information
  ) a

PIVOT

  (
    COUNT(WigitID) FOR WigitID IN (MT6, MT8, M89A, M89D, M90)
  ) b
相关问题