Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将0放置在SQL中特定列中的一个重复行之后?_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

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

如何将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

我有一个select查询,它提供了我所需的结果。这是我从查询中获得的数据:

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”的函数在这里不会更好,因为它只返回一行而不是被操纵的行?这真的很有帮助。谢谢你的回答,这真的很有帮助。谢谢你的回答。