我有一個表,我試圖復制每一行,但其中一列具有不同的值。問題是獲得該值涉及另一個沒有當前關系的表。
表搜索:
搜索ID | 姓名 |
---|---|
1 | 1 |
2 | 乙 1 |
3 | C 1 |
4 | A2 |
5 | 乙二 |
6 | C 2 |
表搜索欄位:
搜索欄位 ID | 搜索ID | 富 |
---|---|---|
1 | 1 | 鮑勃 |
2 | 1 | 瑪麗 |
3 | 2 | 蒂姆 |
4 | 2 | 賈斯汀 |
5 | 3 | 周杰倫 |
6 | 3 | 安東尼 |
我想要得到的是 Table SearchFields 看起來像這樣:
表預期搜索欄位:
搜索欄位 ID | 搜索ID | 富 |
---|---|---|
1 | 1 | 鮑勃 |
2 | 1 | 瑪麗 |
3 | 2 | 蒂姆 |
4 | 2 | 賈斯汀 |
5 | 3 | 周杰倫 |
6 | 3 | 安東尼 |
7 | 4 | 鮑勃 |
8 | 4 | 瑪麗 |
9 | 5 | 蒂姆 |
10 | 5 | 賈斯汀 |
11 | 6 | 周杰倫 |
12 | 6 | 安東尼 |
我能看到的唯一關系是Name
Search 列的一部分(直到最后一個空格的所有內容都給了我重復的行,我可以從每個重復項中獲取更高的 SearchId 來給我新的 SearchId 使用)
到目前為止,我已經能夠執行以下操作:
select
max(search.searchid) [SearchId],
substring( name,
1,
len(name) - charindex(' ', reverse(name))) [Name]
from search
group by
substring( name,
1,
len(name) - charindex(' ', reverse(name)))
這給了我
搜索ID | 姓名 |
---|---|
4 | 一個 |
5 | 乙 |
6 | C |
但我不確定如何獲取這些結果并將它們映射到 SearchFields,以執行以下操作:
;with cte (searchid, name)
as
(
select
max(search.searchid) [SearchId],
substring( name,
1,
len(name) - charindex(' ', reverse(name))) [Name]
from search
group by
substring( name,
1,
len(name) - charindex(' ', reverse(name)))
)
-- this part obviously wrong, not sure how to connect the two
insert into SearchFields(SearchId, Foo)
select c.SearchId, sf.Foo from cte c
union all
select Foo from SearchFields sf
uj5u.com熱心網友回復:
想我想通了。
insert into searchfields(searchid, Foo)
select
(
select top 1 searchid from search where searchid =
(select top 1 max(s.searchid)
from search s
group by
substring(name, 1, len(name) - charindex(' ', reverse(name)))
having sf.searchid = min(s.searchid))
) [SearchId], Foo
from searchfields sf
order by searchid
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514580.html
下一篇:T-SQL分組動態日期范圍