如何在SQL中的特定列中的一个重复行之后放置0?

时间:2018-06-14 09:17:57

标签: sql sql-server sql-server-2012

我有一个选择查询,它给了我所需的结果。这就是我从查询中获取数据的原因:

RXID|   NoOfRx|     DrName          |HospitalName           |SBOID
----|---------|---------------------|-----------------------|-------------
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
83  |   1     |dr kkkk jjjj         |nakaoana hospital      |56183
152 |   1     |dr dskhjgjhgjhhghjghg|sms hospital, jaireur  |56183

这就是我想要的:

RXID|   NoOfRx|     DrName          |HospitalName           |SBOID
----|---------|---------------------|-----------------------|-------------
82  |   2     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   0     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   0     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   0     |dr abcdefgh kjk      |sdmh hospital          |56183
82  |   0     |dr abcdefgh kjk      |sdmh hospital          |56183
83  |   1     |dr kkkk jjjj         |nakaoana hospital      |56183
152 |   1     |dr dskhjgjhgjhhghjghg|sms hospital, jaireur  |56183

对于每个重复RXIDNoOfRx列的其余部分应该为零。我该怎么做?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是未经测试的,但可能类似于:

SELECT RXID,
       CASE ROW_NUMBER() OVER (PARTITION BY RXID ORDER BY (SELECT NULL)/*I can see no unique ID in your table*/) WHEN 1 THEN NoOfRx ELSE 0 END AS NoOfRx
       DrName,
       HospitalName,
       SBOID
FROM YourTable;

值为NoOfRx的行将随机,因为没有可用于创建订单的唯一键。

答案 1 :(得分:1)

这可能会对你有帮助。

;WITH CTE AS
( 
    SELECT 82 AS RXID ,   2     AS NoOfRx,'dr abcdefgh kjk' AS DrName,'sdmh hospital' AS HospitalName,56183 AS SBOID
    UNION ALL SELECT 82  ,   2     ,'dr abcdefgh kjk'      ,'sdmh hospital',          56183
    UNION ALL SELECT 82  ,   2     ,'dr abcdefgh kjk'      ,'sdmh hospital',          56183
    UNION ALL SELECT 82  ,   2     ,'dr abcdefgh kjk'      ,'sdmh hospital',          56183
    UNION ALL SELECT 82  ,   2     ,'dr abcdefgh kjk'      ,'sdmh hospital',          56183
    UNION ALL SELECT 83  ,   1     ,'dr kkkk jjjj'         ,'nakaoana hospital',      56183
    UNION ALL SELECT 152 ,   1     ,'dr dskhjgjhgjhhghjghg','sms hospital,jaireur',56183
)
SELECT RXID
,CASE ROW_NUMBER() OVER(PARTITION BY NoOfRx ORDER BY (SELECT 1)) WHEN 1 THEN NoOfRx ELSE 0 END AS NoOfRx
,DrName,HospitalName,SBOID
FROM CTE