Member 14156756 Ответов: 1

Как найти иерархию потока электронной почты из этой таблицы.


ProductId | ParentId | Levels
1174           0        1174
311           1174      311, 1174
1186          311       1186, 311, 1174
448           1186      448, 1186, 311, 1174
3365          448       3365, 448, 1186, 311, 1174


Что я уже пробовал:

;With Parents(ProductId, ParentId, Levels)
As(
  Select ProductId, ParentId, Levels
  From Products
  Where ParentId = 0 
  Union All
  Select p.ProductId, p.ParentId, p.Levels
  From Products p
  Join Parents cte On cte.ProductId = p.ParentId
)
Select *
From Parents

Из потока электронной почты
CROSS APPLY STRING_SPLIT(EmailThreadChildHashcode, ',')
)

Выберите * от @канавкой

Santosh kumar Pithani

Здравствуйте,пожалуйста, дайте один образец записи и ожидаемый результат, то его очень трудно понять.

Member 14156756

примерные данные уже объявлены в вопросе и пример Out put like :-

То Docid ParentDocId TheradGroupId ThreadLevel
13376 0 1 0
13377 13348 1 1
13379 13378 1 2
13380 13348 1 2
13371 13456 1 3
13372 13457 2 1

RedDk

После очень быстрого взгляда на то, что вы сделали, я могу сказать, что "выход" (четыре столбца) никогда не будет чем-то большим, чем контейнер из двух столбцов ... так что это последнее

 надпись-это фантазия. 

См. ваш оператор "INSERT INTO @spli", где вы специально квантовали количество возвращаемых столбцов как два, [DocId] и [Dataa] ...

И посмотрите CROSS APPLY STRING_SPLIT в BOL ... что - то в этом банальном заполнителе с использованием apostrpphe выглядит не так. Возможно, это редактор CP. Я не знаю.

Member 14156756

я не знаю, как получить этот результат из этой таблицы. Я подумал, что сначала я разделю Родительский и дочерний хэш-код из столбца emailthreadchild, а после этого я сравню хэш-код с emailthreadparenthashcode и выведу там loaddocumentid. вот почему я использую функцию split_string. может быть, я ошибаюсь. но я стараюсь получить этот результат именно так..

RedDk

Хорошо,

Я реконструировал сценарий, используя данные по CREATE TABLE, и поскольку я использую SQLServer 2008, мне пришлось исследовать проблему выбора внутри SELECT с помощью UTF, который я получил отсюда:

https://stackoverflow.com/questions/10914576/t-sql-split-string

Но, поскольку STRING_SPLIT был изобретен и включен в SQL Server 2016, любые разговоры о его магических свойствах для меня потеряны. Я предлагаю пробежаться по этому потоку stackoverflow и узнать, что вы можете сделать, чтобы разрезать эту подстроку 2, 4 и 6 [EmailThreadChildHashcode], используя одно из решений response post ... Как я уже начал делать ... но у меня просто нет времени прямо сейчас, чтобы запустить этот фактический SUB SELECT (подсказка) ...

RedDk

Еще один ответ:

Я вижу, что в опубликованных данных нет выходных данных, соответствующих любому из [DocId], поэтому я должен предположить, что [LoadDocumentId] - это не одно и то же?

Member 14156756

Да, верно, это только для примера.

1 Ответов

Рейтинг:
2

RedDk

Так что, в любом случае ... сверьте это с опубликованным "что я пробовал:"

CREATE TABLE [tbl_SS_stringsplit](
	[EmailThreadId] int,
		[LoadId] int,
			[LoadDocumentId] int,
				[EmailThreadParentHashcode] NVARCHAR(256),
					[EmailThreadChildHashcode] NVARCHAR (1100),
						[EmailThreadChildHashcodeCount] int
						)

Я делаю это, потому что я могу скопировать непосредственно из дампа кода, который вы предоставили, и получить хорошую покупку на этих данных ...
BULK INSERT  [tbl_SS_stringsplit]
	FROM 'C:\Users\SS\tabledata.txt'
	
SELECT [EmailThreadId]
      ,[LoadId]
      ,[LoadDocumentId]
      ,[EmailThreadParentHashcode]
      ,[EmailThreadChildHashcode]
      ,[EmailThreadChildHashcodeCount]
  FROM [tbl_SS_stringsplit]

Данные возвращаются в порядке, и я проверил это, выполнив этот запрос:
SELECT [EmailThreadId]
      ,[LoadId]
      ,[LoadDocumentId]
      ,[EmailThreadParentHashcode]
      ,[EmailThreadChildHashcode]
      ,[EmailThreadChildHashcodeCount]
  FROM [tbl_SS_stringsplit]
GO	

Чтобы получить это (сокращенно):
EmailThreadId	LoadId	LoadDocumentId	EmailThreadParentHashcode	EmailThreadChildHashcode	EmailThreadChildHashcodeCount
1	18	13388	cc4daed8ce8114a66cb914eb2ce9fa75	NULL	0
2	18	13389	afbfe22c38834f0a8838d8bcf75dbab9	afbfe22c38834f0a8838d8bcf75dbab9bb7f39e1781ce52a587f8380fafde71d	1
3	18	13391	41a9539ab798aba22485831373780218	41a9539ab798aba22485831373780218a0fe9b1f2fcfa25380c8abcac1cebb9a	1
4	18	13392	a52053d8f4b2d2302b79a0ebef617be4	a52053d8f4b2d2302b79a0ebef617be46ee25b4c32f9b2992743cd71184aeb34	1
5	18	13393	684b8eb73d3faa9ca3e18de471c6880a	NULL	0
6	18	13394	5af02be12a4f8e626e15262c6633a431	1b1b00ac5c9ffd1dbeaf10877e86822e6abdf163046bc08c2f31b737542aeb6,5af02be12a4f8e626e15262c6633a4311b1b00ac5c9ffd1dbeaf10877e86822e	2
.
.
.
20	19	13423	d658fffb9710b42f81aadef034c2ced4	d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe	1
21	19	13424	d658fffb9710b42f81aadef034c2ced4	eac8cbfb1aa25bc4c451efaec6c5f86d74e4fde19c5f57970480fc3924558506,53b9e269f5a156f19f9297a4c467be64eac8cbfb1aa25bc4c451efaec6c5f86d,cebdb5365b0f764b28ebea3325aa3d8953b9e269f5a156f19f9297a4c467be64,eaee8869bc2d9f22123796f521f4e81ecebdb5365b0f764b28ebea3325aa3d89,7100fbd68ecdfba259f19a52ccefecfeeaee8869bc2d9f22123796f521f4e81e,d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe	6

Итак, вот изменение функции, которую вы опубликовали"
Declare @spli table 
(
 DocId INT,
 Dataa NVARCHAR(1000)
)

INSERT INTO @spli (DocId,Dataa) (
--SELECT LoadDocumentId,value
SELECT [LoadDocumentId], [keyword]
FROM [tbl_SS_stringsplit] [a]
    --CROSS APPLY STRING_SPLIT(EmailThreadChildHashcode, ',')
        CROSS APPLY STRING_SPLIT([a].[EmailThreadChildHashcode], ',') [b]
	)

SELECT * FROM @spli

..- чтобы получить что-нибудь обратно, между прочим ... что выглядит примерно так (во всей своей полноте):
DocId	Dataa
13388	NULL
13389	afbfe22c38834f0a8838d8bcf75dbab9bb7f39e1781ce52a587f8380fafde71d
13391	41a9539ab798aba22485831373780218a0fe9b1f2fcfa25380c8abcac1cebb9a
13392	a52053d8f4b2d2302b79a0ebef617be46ee25b4c32f9b2992743cd71184aeb34
13393	NULL
13394	1b1b00ac5c9ffd1dbeaf10877e86822e6abdf163046bc08c2f31b737542aeb6
13394	5af02be12a4f8e626e15262c6633a4311b1b00ac5c9ffd1dbeaf10877e86822e
13395	NULL
13398	NULL
13399	d63fc2c2c869f796088831c1257ce0464fbcc7891545f2d6fbe31d83405a5e06
13399	595d80afcdc22eca596e9953a8ca164dd63fc2c2c869f796088831c1257ce046
13361	NULL
13362	aebbb64f3c3293c78188a8f0e316e8338fbf58a7b42e1875287c0c0b31b004d4
13362	8fbf58a7b42e1875287c0c0b31b004d4aebbb64f3c3293c78188a8f0e316e833
13363	NULL
13416	NULL
13417	d658fffb9710b42f81aadef034c2ced450ce8fc0fd6461364168fce14c51a3c3
13418	515c78fada1b30f404b82e30e7d4025fcf0075c15f1ee19485c1f82e948964a1
13419	cebdb5365b0f764b28ebea3325aa3d8953b9e269f5a156f19f9297a4c467be64
13419	eaee8869bc2d9f22123796f521f4e81ecebdb5365b0f764b28ebea3325aa3d89
13419	7100fbd68ecdfba259f19a52ccefecfeeaee8869bc2d9f22123796f521f4e81e
13419	d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe
13420	NULL
13421	eaee8869bc2d9f22123796f521f4e81ecebdb5365b0f764b28ebea3325aa3d89
13421	7100fbd68ecdfba259f19a52ccefecfeeaee8869bc2d9f22123796f521f4e81e
13421	d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe
13422	NULL
13423	d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe
13424	eac8cbfb1aa25bc4c451efaec6c5f86d74e4fde19c5f57970480fc3924558506
13424	53b9e269f5a156f19f9297a4c467be64eac8cbfb1aa25bc4c451efaec6c5f86d
13424	cebdb5365b0f764b28ebea3325aa3d8953b9e269f5a156f19f9297a4c467be64
13424	eaee8869bc2d9f22123796f521f4e81ecebdb5365b0f764b28ebea3325aa3d89
13424	7100fbd68ecdfba259f19a52ccefecfeeaee8869bc2d9f22123796f521f4e81e
13424	d658fffb9710b42f81aadef034c2ced47100fbd68ecdfba259f19a52ccefecfe

Можете ли вы понять, куда я иду с этим теперь, после того как я изменил код, который вы опубликовали?
Это не то решение, о котором вы просите, но я думаю, что использование STRING_SPLIT было тем зависанием, с которым вы надеялись, что кто-то может вам помочь.