首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正确的值自动填充列

使用正确的值自动填充列
EN

Stack Overflow用户
提问于 2015-08-05 09:15:03
回答 1查看 1.9K关注 0票数 0

下面是填充CODE1CODE2的SQL表,对于CODE3,我输入了我想要自动填充的值。总共有500.000多行。

代码语言:javascript
复制
CODE1   CODE2   CODE3  
 1      100       A  
 2      100       A  
 3      200       B  
 4      300       A  
 5      300       A  
 1      300       A  
 5      400       A  
 6      400       A  
 2      400       A  
 7      500       C
 8      300       A
 7      600       C
 2      800       A
 3      900       B

我必须自动填充CODE3,以便分组由CODE1 & CODE2定义的所有连接。如果CODE 2具有相同的值(行为100:1,2),则CODE 3具有相同的值(A),如果CODE 1具有相同的值(1行:1,6),则CODE 3具有相同的值(A)。

知道如何做到这一点吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 09:44:13

我就是这么理解的:

代码语言:javascript
复制
WITH CODE_COUNTS AS (
SELECT *, COUNT(*) OVER (PARTITION BY CODE2) as CODE2_DUPES
FROM CODES
) 
SELECT 
  CODE1, 
  CODE2,
  CASE WHEN CD.CODE2_DUPES > 1 THEN 'A'
      WHEN EXISTS (SELECT * FROM CODE_COUNTS
                   WHERE CD.CODE1 = CODE1 AND CODE2_DUPES > 1) THEN 'A'
      ELSE 'B' 
  END CODE3
FROM CODE_COUNTS CD;

此代码首先计算CTE中每个CODE2中的重复数。在此之后,对于每个CODE1,我们将检查具有相同CODE1的其他行是否有一个重复数大于一个的CODE2。

提供请求结果的SqlFiddle

更新

代码语言:javascript
复制
WITH CODE_COUNTS AS (
SELECT code1, code2, 
   COUNT(*) OVER (PARTITION BY CODE2) as CODE2_DUPES,
   CASE -- Assign row number within CODE1, where CODE2 is unique
     WHEN COUNT(*) OVER (PARTITION BY CODE2) > 1 THEN 0
     ELSE  ROW_NUMBER() OVER (PARTITION BY CODE1 ORDER BY CODE2) 
   END rn
FROM CODES
) 
SELECT CD.CODE1, CD.CODE2,
 CASE WHEN CD.CODE2_DUPES > 1 THEN 'A' -- CODE is not unique
 ELSE CHAR(ASCII('A') + SUM(CASE WHEN rn = 1 THEN 1 ELSE 0 END) OVER (
           ORDER BY CODE1) ) END CODE3
FROM CODE_COUNTS CD
ORDER BY CD.CODE1, CD.CODE2

在上面的代码中涉及到一点魔力,我将尝试解释:

  1. 我假设CODE2组有几个记录,我们分配A
  2. CODE2有几个记录的情况下,我们将Zero分配给rn字段,这意味着对于所有关联的记录,A将增加零。
  3. CODE2是唯一的地方,我们运行CODE1计数并相应地增加CODE3

更新示例的Sql

我保留了SQL的原始版本,因为它本质上是相同算法的更简单的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31828224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档