【发布时间】:2021-10-25 22:45:00
【问题描述】:
我有一张如下所示的零件表:
| Part | Part Num | Thing1 | Thing2 | Thing3 | Thing4 |
|---|---|---|---|---|---|
| Door | 10105322 | abc | abc | ||
| Door | 10105323 | abc | abc | ||
| Door | 10105324 | abc | abc | ||
| Door | 84625111 | abc | abc | abc | |
| Door | 84625118 | abc | abc | abc | |
| Door | 84625185 | abc | abc | abc | |
| Door | 56897101 | abc | abc |
部件号始终为 8 个字符。对于许多部分,前 6 个字符相同,后 2 个字符不同。零件编号前 6 个字符相同的行以及 Thing1/Thing2/Thing3/Thing4 中所有具有相同值的行需要合并,零件编号变为 6 个字符。 (上表第1/2/3行)
前 6 个字符相同但 Thing1/Thing2/Thing3/Thing4 中的值在所有行中不相同的行需要保持不变,并且部件号保持 8 个字符。 (上表第4/5/6行)
前 6 个字符唯一的行需要保持不变,部件号保持 8 个字符。 (上表第7行)
想要的结果如下所示:
| Part | Part Num | Thing1 | Thing2 | Thing3 | Thing4 |
|---|---|---|---|---|---|
| Door | 101053 | abc | abc | ||
| Door | 84625111 | abc | abc | abc | |
| Door | 84625118 | abc | abc | abc | |
| Door | 84625185 | abc | abc | abc | |
| Door | 56897101 | abc | abc |
【问题讨论】:
-
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
-
我今天早些时候没有保存我的 SQL,但我尝试在 LEFT([Part Num], 2) 上分配一个
DENSE_RANK并按所有其他列进行分区,并计划如果排名值为 1,则使用CASE语句生成 6 位零件编号。但是,在我的示例中,这不适用于第 4/5/6 行。它将相同的排名 1 分配给第 4/5 行,将排名 2 分配给第 6 行。我最初的想法是所有符合条件的行都将被分配 1 排名,其他任何东西都会获得 2、3、4 等排名,但是事实并非如此。
标签: sql sql-server tsql window-functions