我有两张表,结构如下,
表A
province_id
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
.
.
.
表b
f_name city_value label
city_id 1 Austin
ac_id 1 Mayor: Jason Lee
df_id 1 Republican
ef_id 1 Property tax is high
city_id 2 Dallas
dfg_id 2 Mayor: ABC
fth_id 2 Republican-3
tpr_id 2 Property tax is low
city_id 3 Waco
ddd_id 3 Mayor: DEF
ers_id 3 Republican-4
qws_id 3 Property tax is middle
city_id 4 Arlington
zxg_id 4 Mayor: HGR
zUg_id 4 Republican+4
.
.
.
1.第一个表名为a
,它只有1列province_id
。
(它有重复项,几乎有1500000行,唯一值几乎是200)
1.第二个表名为b
,它有3列:(b表是纵向数据,总行将近400000)
- 表b中的第1栏称为
f_name
,该变量的值与第3栏label
相关联。
例如,当f_name=City_id且City_Value=1时,那么Label`l=Austin(城市名称)。
当f_name=City_id且City_Value=2时,则标签=Dallas(城市名称)。
当f_name=City_id且City_Value=3时,则Label=Waco(城市名称)。
当f_name=City_id且City_Value=4时,则Label=Arlington(城市名称)。
- 表b中的第2列称为
city_value
,与province_id
一样,它也有重复项。例如,对于特定的城市“奥斯汀”,其City_Value为1。 - 表b中的第三列称为
label
,该变量下的内容是关于特定省份的城市信息。
在每个city_value
中,变量label
的单元格内容是唯一的。在每个city_value
内的所有单元格中,感兴趣的是城市名称(例如,奥斯汀)。
我想要的是:
1.对于a表,请在重复数据删除后去掉province_id
列的重复项,a表应该是这样的
Table a
province_id
1
2
3
.
.
.
1.对于b表,请保留所有city_value
和城市名称的数据记录;去重后,b表应该是这样的
f_name city_value label
city_id 1 Austin
city_id 2 Dallas
city_id 3 Waco
city_id 4 Arlington
.
.
.
1.使用公共密钥(去重复的province_id
和city_value
)将(1)和(2)的结果连接在一起,所得到的数据记录应该等于去重复的province_id
的数目。事实上,唯一的PROMENT_ID只有200左右,而经过重复数据删除后的总行仍然是200000行左右。换句话说,重复数据消除后,表a的总行范围远远小于表b。
1.如果我想获得相同的结果,我如何编写一个CTE(公用表表达式)代码来在SQL Server中实现这一点?
很明显,像“奥斯汀”、“达拉斯”、“韦科”、“阿灵顿”这样的城市正是我所需要的。
我下面的代码不正确,因为在连接两个表之后,重复项仍然存在。
SELECT DISTINCT a.province_id, b.label
FROM a
JOIN b ON
a.province_id=b.city_value;
1条答案
按热度按时间nimxete21#
您可以首先从表中删除所有不需要的行
或至少从表a中删除所有重复项