Excel到SQL和处理重复值

2024-09-24 02:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

工作表1中的查找表。你知道吗

ID      CODE  REASSIGN(CODE)
W12-05  AA    ZZ
W12-05  BB    ZZ
W14-01  CC    CC
W14-03  AA    AA
W15-01  DD    DD
W15-01  DD    DD

从报告中生成ID和代码

重新分配(代码)是我试图完成的。如果有多个ID(例如W12-05)具有相同的代码值和不同的代码值,则将其分配给“ZZ”。但是,如果有多个ID并且它们都具有相同的代码值(例如W15-01),则将其分配给相同的代码值。你知道吗

有两个工作表(工作表2和工作表3)包含ID和与该ID关联的不同数据

数据表:

ID      LOOKUP REASSIGN(CODE)
W12-05  ZZ
W14-01  CC
W14-03  AA
W15-01  DD

如何完成第一个表中的重新分配(代码)列?大致如下:

如果ID重复并且有多个不同的代码,则分配给ZZ。 如果ID重复且代码相同,则分配给相同的代码。你知道吗

可能存在这样的情况,即如果存在重复ID的特定多个代码,则需要将其分配给特定代码。”当我不知道它应该放在哪里并且可以由另一个部门处理时,“ZZ”是默认值。有时我知道代码“EE”和代码“FF”属于一个部门,例如,有逻辑将其分配给“GG”。你知道吗

我希望基于ID列合并所有3个工作表,并且希望工作表2和工作表3中的所有数据都在那里,即使ID中没有匹配的数据。工作表1将用作查找,以拉入重新分配(代码)。你知道吗

请让我知道,如果我需要进一步解释或如果有任何问题。我对想法和其他解决方案持开放态度,因为这正是我脑海中浮现的逻辑。我不确定是否为重新分配(代码)创建另一个表更好,或者我的逻辑是否合理。你知道吗

Original Question - RESOLVED

Combination of IF, REPLACE, and & - I am happy to provide more details.

I have 3 workbooks I am pulling data from and I do perform some data manipulation.

Here are the formulas I currently have in my spreadsheet:

Column: OB

Formula: =SUBSTITUTE(SUBSTITUTE([@[OBN]]," ",""),"-","")

This cleans up the OBN column removing all hyphens and spaces to standardize it based on the data table.

Column: DO

Formula:

=IF(OR([@[DON]]="NA",ISBLANK(TRIM([@[DON]])),[@[DON]]="N/A",ISNA([@[DON]]),ISBLANK([@[DON]])),"",[@[DON]])

This makes the DO column blank if there is no value there or if it's NA or N/A, as that is how the report displays it. Otherwise, use the value of DON as DO.

Column: OB+DO (This is the ID in the tables below)

Formula:

=IF([@DO]="",[@OB],CONCATENATE([@OB],"-",[@DO]))

Concatenate columns OB and DO with a hyphen if DO contains a value that is not NA or N/A. Otherwise, just use OB.


Tags: andthe代码idiscodedodd
1条回答
网友
1楼 · 发布于 2024-09-24 02:16:26

由于Excel不能很好地处理数据,我不得不转向SQL。我现在已经在SQL中完全运行了。如果有人对这个解决方案感兴趣,我会把它贴在下面。你知道吗

SELECT [Table1].[ID], [Table1].[CODE], Count([Table1].[CODE]) AS [CODE Count] FROM [Table1] GROUP BY [Table1].[ID], [Table1].[CODE];

我首先计算代码,然后按ID和代码分组。这将获得每个ID的每个代码的计数。对于上面的示例,W12-05将列出两次,并且计数为1和1,结果如下表所示。你知道吗

表2

ID  CODE    CODE Count
W12-05  AA  1
W12-05  BB  1
W14-01  CC  1
W14-03  AA  1
W15-01  DD  2

然后,我对ID进行计数并按ID分组

SELECT [Table1].[ID], Count([Table1].[ID]) AS [ID Count]
FROM [Table1]
GROUP BY [Table1].[ID];

表3

ID  ID Count
W12-05  2
W14-01  1
W14-03  1
W15-01  2

这会告诉我每个身份证的总数

接下来,比较每个ID的ID计数和代码计数

SELECT [Table2].[ID], [Table2].[CODE], [Table2].[CODE Count], [Table3].[Count ID]
FROM [Table2] LEFT JOIN [Table3] ON [Table2].[ID] = [Table3].[ID];

这将产生下表。你知道吗

表4

ID     CODE CODE Count  ID Count
W12-05  AA       1          2
W12-05  BB       1          2
W14-01  CC       1          1
W14-03  AA       1          1
W15-01  DD       2          2

最后一步是比较代码和ID的计数

SELECT [Table4].[ID], [Table4].[CODE Count], [Table4].[Count ID], IIf([Table4].[CODE Count]<>[Table4].[Count ID],"ZZ", [Table4].CODE) AS CODE
FROM [Table4];

如果代码计数和ID计数不匹配,则将其分配给“ZZ”。你知道吗

表5

ID    CODE Count  ID Count  CODE
W12-05    1            2     ZZ
W12-05    1            2     ZZ
W14-01    1            1     CC
W14-03    1            1     AA
W15-01    2            2     DD

从这里开始,你可以取不同的值。你知道吗

SELECT DISTINCT [Table5].[ID], [Table5].CODE
FROM [Table5];

ID     CODE
W12-05  ZZ
W14-01  CC
W14-03  AA
W15-01  DD

我不确定这是否是最佳的方式,但它是一个工作的解决方案,为我。我希望这有帮助!你知道吗

相关问题 更多 >