gpt4 book ai didi

python - Excel 到 SQL 并处理重复值

转载 作者:行者123 更新时间:2023-12-01 01:14:54 26 4
gpt4 key购买 nike

工作表 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 和 CODE 从报告中生成

重新分配(代码)是我想要完成的任务。如果有多个相同但 CODE 值不同的 ID(例如 W12-05),则将其分配给 "ZZ"。但是,如果有多个 ID 并且它们都具有相同的 CODE 值(例如 W15-01),则将其分配给相同的代码值。

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

数据表:

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

如何完成第一个表中的 REASSIGN(CODE) 列?大致如下:

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

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

我想根据 ID 列合并所有 3 个工作表,并且希望工作表 2 和工作表 3 中的所有数据都在那里,即使 ID 不匹配也是如此。工作表 1 将用作查找以提取 REASSIGN(CODE)。

如果我需要进一步解释或有任何问题,请告诉我。我对想法和其他解决方案持开放态度,因为这只是我脑海中的逻辑。我不确定是否为 REASSIGN(CODE) 创建另一个表更好,或者我的逻辑是否合理。

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.

最佳答案

由于 Excel 不能很好地处理数据,我不得不转向 SQL。我现在已经在 SQL 中完全运行了。如果有人对解决方案感到好奇,我已将其发布在下面。

SELECT [表1].[ID]、[表1].[代码]、计数([表1].[代码]) AS [代码计数]
来自[表1]
GROUP BY [表1].[ID], [表1].[代码];

我首先对 CODE 进行计数,并按 ID 和 CODE 进行分组。这可以让我计算出每个 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 的 ID 计数和 CODE 计数。

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

我做的最后一步是比较 CODE 和 ID 的计数。

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

如果 CODE 计数和 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

从这里,您可以只获取 DISTINCT 值。

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

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

我不确定这是否是最佳方式,但这对我来说是一个可行的解决方案。我希望这有帮助!

关于python - Excel 到 SQL 并处理重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448831/

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