sql - 逐行计算记录和一些计算 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
这意味着人员列不应包含重复值,它应该是受尊重的价格
解决方案
获得预期结果的一种可能方法是以下语句。您需要拆分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
推荐阅读
- python - 无法将数据保存到数据库 Python
- javascript - 将标签锚定到评论字段
- python - 斐波那契公式没有正确输出第 N 个值
- php - Laravel - 路由资源更新功能不起作用
- java - 如何通过 applicationinsights-agent 将多个应用程序洞察与一个 Java Web 应用程序联系起来?
- python - 如何制作具有可训练权重和可定义输入数量的加权和层?
- c++ - `istream` 到浮点数组(每个项目 4 字节)
- android - 如何使用为 Android 12 发布的新 Material You 颜色
- python - Pyinstaller 在终端停止并且不会继续
- azure-data-explorer - LightIngest 未摄取,停留在发布摄取:0