写了一个简洁的删除重复行的case

用了aggregate函数和temp表。在SQLServer 2008下执行通过。

可以处理存在不同主键的重复数据。

 

create table t
(a int,
b char(10),
c char(10)
)

insert into t values (1, 'aa','bb')
insert into t values (2, 'aa','bb')
insert into t values (3, 'aa','bb')
insert into t values (4, 'cc','bb')
insert into t values (5, 'cc','bb')
insert into t values (6, 'aa','cc')


with tmp as(
select a,row_number () over ( partition by b,c order by b,c) as rownum from t
)
delete from tmp where rownum<>1

select * from t

 

转载于:https://www.cnblogs.com/ImToffee/p/3683486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化这段代码:int main() { // 设置控制台颜色 system("color F4"); // 初始化文件指针和计数器等变量 FILE *fp = NULL; int count = 0; char num[100]; int flag1 = 0, flag2 = 0, flag3 = 0; char F_name[20]; // 进入程序循环 while (1) { // 显示菜单 menu1(); // 获取用户输入的选项 printf("\t请选择你要进的文件操作:"); scanf("%s", num); getchar(); // 判断用户输入是否合法 while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) { printf("\t输入错误!请重新输入:"); scanf("%s", num); getchar(); } // 根据用户输入的选项进相应操作 switch (num[0]) { case '1': flag1 = 1; break; case '2': flag2 = 1; break; case '3': flag3 = 1; break; case '4': printf("\n\t"); exit(0); break; } // 根据不同选项调用不同的函数 if (flag1 == 1) { flag1 = 0; create_file(fp, F_name); } else if (flag2 == 1) { flag2 = 0; edit(); } else if (flag3 == 1) { flag3 = 0; read_file(fp, F_name); } } return 0; } void edit() { FILE *fp = NULL; int count = 0; char num[100]; char F_name[20]; int flag[5] = {0}; // 使用数组来代替多个 flag 变量 while (1) { menu12(); printf("\t请选择你要进的文件操作:"); scanf("%s", num); getchar(); while (strlen(num) > 1 || num[0] < '1' || num[0] > '5') { // 使用字符代替数字 printf("\t输入错误!请重新输入:"); scanf("%s", num); getchar(); } switch (num[0]) { case '1': flag[0] = 1; break; case '2': flag[1] = 1; break; case '3': flag[2] = 1; break; case '4': flag[3] = 1; break; case '5': flag[4] = 1; break; } if (flag[0] == 1) { flag[0] = 0; insert_file(fp, F_name); } else if (flag[1] == 1) { flag[1] = 0; delete_file(fp, F_name); } else if (flag[2] == 1) { flag[2] = 0; search_file(fp, F_name); } else if (flag[3] == 1) { flag[3] = 0; replace_file(fp, F_name); } else if (flag[4] == 1) { flag[4] = 0; write_file(fp, F_name); } } }
06-08
优化建议如下: 1. 减少重复代码:可以将菜单显示和获取用户输入的代码提取为一个函数,减少代码重复,提高代码的可维护性。 2. 减少冗余变量:可以将多个 flag 变量使用一个数组代替,减少冗余变量,提高代码的简洁性。 3. 减少无用变量:可以将 count 变量删除,因为没有使用。 4. 统一变量命名:可以将 num 变量命名为 option,更加清晰明了。 优化后的代码如下: ```c int main() { // 设置控制台颜色 system("color F4"); // 初始化文件指针和变量 FILE *fp = NULL; char option[100]; int flag[3] = {0}; char F_name[20]; // 进入程序循环 while (1) { // 显示菜单并获取用户输入的选项 int selectedOption = getOption("请选择你要进的文件操作:", 1, 4); // 根据用户输入的选项进相应操作 switch (selectedOption) { case 1: flag[0] = 1; break; case 2: flag[1] = 1; break; case 3: flag[2] = 1; break; case 4: printf("\n\t"); exit(0); break; } // 根据不同选项调用不同的函数 if (flag[0] == 1) { flag[0] = 0; create_file(fp, F_name); } else if (flag[1] == 1) { flag[1] = 0; edit(); } else if (flag[2] == 1) { flag[2] = 0; read_file(fp, F_name); } } return 0; } void edit() { // 初始化文件指针和变量 FILE *fp = NULL; char option[100]; int flag[5] = {0}; char F_name[20]; // 进入程序循环 while (1) { // 显示菜单并获取用户输入的选项 int selectedOption = getOption("请选择你要进的文件操作:", 1, 5); // 根据用户输入的选项进相应操作 switch (selectedOption) { case 1: flag[0] = 1; break; case 2: flag[1] = 1; break; case 3: flag[2] = 1; break; case 4: flag[3] = 1; break; case 5: flag[4] = 1; break; } // 根据不同选项调用不同的函数 if (flag[0] == 1) { flag[0] = 0; insert_file(fp, F_name); } else if (flag[1] == 1) { flag[1] = 0; delete_file(fp, F_name); } else if (flag[2] == 1) { flag[2] = 0; search_file(fp, F_name); } else if (flag[3] == 1) { flag[3] = 0; replace_file(fp, F_name); } else if (flag[4] == 1) { flag[4] = 0; write_file(fp, F_name); } } } int getOption(char* prompt, int min, int max) { char option[100]; while (1) { // 显示菜单并获取用户输入的选项 printf("%s", prompt); scanf("%s", option); getchar(); // 判断用户输入是否合法 if (strlen(option) == 1 && option[0] >= min + '0' && option[0] <= max + '0') { return option[0] - '0'; } else { printf("\t输入错误!请重新输入:"); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值