You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现数据行拆分与分数分配的精简方案问询

精简版SQL实现方案

刚好碰到过类似的需求,用CROSS APPLY配合VALUES构造行集是最简洁的方式,不用绕存储过程或者复杂CTE,直接一步到位:

CREATE TABLE #temptable ( 
    [Opener] varchar(50), 
    [Closer] varchar(50), 
    [PolicyRef] varchar(10), 
    [Transaction Type] varchar(14) 
)
INSERT INTO #temptable VALUES 
    ( 'Agent C', 'Agent C', 'ZYXA01EF01', 'New Business' ), 
    ( 'Agent A', 'Agent B', 'ABCD01EF01', 'New Business' )

-- 核心查询
SELECT
    v.Agent,
    t.PolicyRef,
    t.[Transaction Type],
    v.Score
FROM #temptable t
CROSS APPLY (
    VALUES
        -- 优先处理Opener和Closer相同的情况,只返回一行1.0分
        (t.Opener, 1.0)
        -- 当两者不同时,追加Closer的0.5分行
        , CASE WHEN t.Opener <> t.Closer THEN (t.Closer, 0.5) ELSE NULL END
) v(Agent, Score)
-- 过滤掉CASE生成的NULL行(也就是Opener=Closer时的第二行)
WHERE v.Agent IS NOT NULL

DROP TABLE #temptable

思路解释:

  • CROSS APPLY可以把每行数据和我们构造的小行集做关联,轻松实现行拆分逻辑。
  • VALUES子句里,我们先默认生成Opener的行(分数1.0);然后用CASE判断,如果Opener和Closer不同,就再生成Closer的0.5分行,否则返回NULL。
  • 最后通过WHERE v.Agent IS NOT NULL把不需要的NULL行过滤掉,刚好适配两种场景的需求。

执行结果:

AgentPolicy RefTransaction TypeScore
Agent CZYXA01EF01New Business1.0
Agent AABCD01EF01New Business0.5
Agent BABCD01EF01New Business0.5

完全匹配你要的预期输出,代码精简且可读性拉满~

内容的提问来源于stack exchange,提问作者Lynchie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:54