如何将0放置在SQL中特定列中的一个重复行之后?
我有一个select查询,它提供了我所需的结果。这是我从查询中获得的数据:如何将0放置在SQL中特定列中的一个重复行之后?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个select查询,它提供了我所需的结果。这是我从查询中获得的数据: RXID| NoOfRx| DrName |HospitalName |SBOID ----|---------|---------------------|-----------------------|------------- 82 | 2 |dr abcdefgh kjk |sdmh hospital |56183 82
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
对于每个重复的
RXID
,NoOfRx
列的其余部分将为零。我该怎么做?任何帮助都将不胜感激。这是未经测试的,但可能类似于:
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
的行将是随机的,因为没有可用于创建订单的唯一键。这是未经测试的,但可能类似于:
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
的行将是随机的,因为没有可用于创建订单的唯一键。这可能会对您有所帮助
;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
这可能对你有帮助
;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
1) 识别重复项2)将行数3)标记为0,其中行数>1只是一个想法,但使用“分组依据”的聚合函数在这里是否会更好,因为它将只返回一行而不是操纵的行?1)识别重复项2)将行数3)标记为0,其中行数>1只是一个想法,但会是一个聚合使用“groupby”的函数在这里不会更好,因为它只返回一行而不是被操纵的行?这真的很有帮助。谢谢你的回答,这真的很有帮助。谢谢你的回答。