首页 > 解决方案 > 逐行计算记录和一些计算 SQL Server

问题描述

我使用的是 SQL Server 15.0.2070.41,我有一个类似的表:

Name | Price | No_Of_Person | Name_Of_Person 
-----+-------+--------------+------------------
Nits |  100  |   2          | Risa, Bit            
Nits |  200  |   3          | Nits, Dish, Bit        
Nits |   80  |   4          | Bit, Risa, Nits, Dish 
Nits |   20  |   3          | Bit, Nits, Nash      

共有 5 名成员,他们的名字分别是 Nits、Dish、Risa、Bit、Nash 在这个表名列中显示了自己花钱的人的名字。

我如何计算哪个人会向 Nits 支付多少费用?

我试过类似的东西:

Select 
    name, Item, Price, No_Of_Person, Name_Of_Persian, Note, Date,  
    Price / No_Of_Person as 'result' 
From 
    tb_Expense_Details 

SELECT 
    price, Name_Of_Person 
FROM
    tb_Expense_Details  
WHERE
    name = 'Risa' 
GROUP BY
    price, Name_Of_Person

样本数据:

ID  Name    Item    Price   No_Of_Persion   Name_Of_Persion Note    Date
1   nitis   ANY     50         2             Rishi,Nitish         2020-03-09
2   nishan  ANY     300        3             Rishi,Nitish,Nishant 2020-03-09

我得到输出:

Name    Person  Price
nishant Nishant 100.000000000000
nishant Nitish  100.000000000000
nitish  Nitish  25.000000000000
nishant Rishi   100.000000000000
nitish  Rishi   25.000000000000

但我想要输出像:

Nishant  100
Nitish   125
Rishi    125

这意味着人员列不应包含重复值,它应该是受尊重的价格

标签: sqlsql-server

解决方案


获得预期结果的一种可能方法是以下语句。您需要拆分Name_Of_Person列中的值并进行聚合:

桌子:

CREATE TABLE tbl_Expence_Details ( 
   [ID] [int] IDENTITY(1,1) NOT NULL, 
   [Name] [nvarchar](max) NULL, 
   [Item] [nvarchar](max) NULL, 
   [Price] [int] NULL, 
   [No_Of_Persion] [int] NULL, 
   [Name_Of_Persion] [nvarchar](max) NULL, 
   [Note] [nvarchar](max) NULL, 
   [Date] [date] NULL 
)
INSERT INTO tbl_Expence_Details
   (Name, Item, Price, No_Of_Persion, Name_Of_Persion)
VALUES   
   ('nitis',  'ANY', 50,  2, 'Rishi,Nitish'),
   ('nishan', 'ANY', 300, 3, 'Rishi,Nitish,Nishant')

陈述:

SELECT 
   RTRIM(LTRIM(s.[value])) AS Person, 
   SUM(1.0 * t.Price / t.No_Of_Persion) AS Price
FROM tbl_Expence_Details t
CROSS APPLY STRING_SPLIT(t.Name_Of_Persion, ',') s
GROUP BY RTRIM(LTRIM(s.[value]))   

结果(没有四舍五入和格式化):

Person  Price
Nishant 100.000000000000
Nitish  125.000000000000
Rishi   125.000000000000

推荐阅读