gpt4 book ai didi

sql - 当值不是这个时替换,否则找到值(value)并使用?

转载 作者:行者123 更新时间:2023-12-02 03:00:56 25 4
gpt4 key购买 nike

希望我能在这里说得通。

我正在处理 claim 数据, claim 人可以是自己保单的成员,也可以是其他人保单的受抚养人,或两者兼而有之。

当 claim 人提交 claim 时, claim 会附在保单号上。

我试图让每个 claim 人获得一行,但是当我尝试加入以获得此保单编号时,我得到了多行。

我需要保单号码,但我还需要每个 claim 人一行。

关于如何最好地解决这个问题的任何想法?

这是我需要完成的。

TABLE1
=========================================================
Claim No. Policy No. Claimant Identity
=========================================================
1 2 Joe Member
2 3 Joe Spouse
3 3 Suzy Member
4 1 Mark Spouse
=========================================================

TABLE2
=========================================================
Policy No. Member E-mail
=========================================================
1 Diane merp@merp
2 Joe potato@potato
3 Suzy fake@fake
=========================================================

RESULT
=================================================================================
Policy No. Claimant Identity E-mail No. of Claims
=================================================================================
2 Joe Member potato@potato 2
3 Suzy Member fake@fake 1
1 Mark Spouse merp@merp 1
=================================================================================

本质上,我想获取每个 claim 人的电子邮件和 claim 总数。如果他们是该计划的成员,请获取该保单编号,否则请获取提交 claim 的保单编号。

我不知道我是否有足够的信息来解决这个问题。我能想到的唯一方法是使用名称字段,但这不是唯一的(例如,此数据中可能有许多 John Smiths。)

最佳答案

您可以使用公用表表达式来汇总 TABLE1 中的数据。 ,然后重新加入它。 (在这里,我冒昧地将 TABLE1 重命名为 Claims ,并将 TABLE2 重命名为 Policies :

;WITH ClaimsSummary AS (
SELECT
COUNT(*) AS ClaimCount,
PolicyNo
FROM Claims
GROUP BY PolicyNo
)
SELECT
*
FROM Policies AS p
INNER JOIN ClaimsSummary AS cs
ON p.PolicyNo = cs.PolicyNo

我用你的数据做了一个 SQLFiddle,所以你可以看到它: http://sqlfiddle.com/#!6/2af67/1

一些解释:
  • 公用表表达式 (CTE) 创建一个“属于”当前查询范围的结果集。它就像一个子查询,但有一点不同,因为它是在主查询之上定义的,而不是在 JOIN 内部。条款。公用表表达式总是以 WITH 开头, 并且必须以 ; 开头,除非它们是查询批处理中的第一条语句。 (出于习惯,我添加了 ;;这并不是必需的。)
  • COUNT(*)是所谓的“聚合函数”。聚合函数将多行的值组合在一起形成一个值。
  • GROUP BY告诉我们的聚合函数要聚合的列。我们想要的是“针对特定保单编号的所有 claim 计数” - 所以我们称之为 COUNT(*)计算表中的行数(因为一行 = 一项 claim ),并按保单编号分组 - 这给了我们 ClaimsSummary 中的一行每个 PolicyNo 的 CTE ,以及每个唯一 PolicyNo 的计数
  • 所以此时,我们在 ClaimsSummary 中有一条记录对于每个人PolicyNo - 那么我们所要做的就是JOIN这两个表在它们的共享 key ( PolicyNo )上在一起 - 我们有我们需要的东西。

  • 这是您可以对聚合函数进行的一些额外阅读 - 如果您自己尝试一下,您会更好地理解这个答案,并且聚合函数是 SQL 最强大的部分之一。 https://www.w3schools.com/sql/sql_groupby.asp

    关于sql - 当值不是这个时替换,否则找到值(value)并使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46202654/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com