Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
Перехожу на MS SQL c ORACLE. Надо реализовать LIASTADD Посмотрел статью На её основе делаю SQL.
Это оригинал:
WITH ABC (FId, FName) AS
(
    SELECT 1, CAST('' AS VARCHAR(8000)) 
    UNION ALL
    SELECT B.FId + 1, B.FName +  A.FName + ', ' 
    FROM (And the above query will return
       SELECT Row_Number() OVER (ORDER BY FId) AS RN, FName FROM tblTest) A 
    INNER JOIN ABC B ON A.RN = B.FId 
)
SELECT TOP 1 FName FROM ABC ORDER BY FId DESC

Говорит не допустимое имя FName!
9 авг 16, 13:41    [19520048]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
ErikI,

Пропустил ,FName во вторм SQL
9 авг 16, 13:50    [19520104]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
Но всё равно не могу понять как задавать поля в запросе B
9 авг 16, 13:58    [19520137]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
msLex
Member

Откуда:
Сообщений: 9291
Вы словами хотя бы опишите, что вам нужно
А то не всем есть время (и желание) разбираться, что же должна делать "LIASTADD" в оракле.
9 авг 16, 14:03    [19520175]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
Складывать строку c разделителем. rec1 +','+ rec2 + ...
Вроде понял как ее применять, но как её использовать в качестве функции?
9 авг 16, 14:12    [19520223]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
https://www.sql.ru/faq/faq_topic.aspx?fid=130 Оно ?
9 авг 16, 14:18    [19520273]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Так?
SELECT T.FId, FName=
STUFF
(
 (
  SELECT ', '+TT.FName
  FROM tblTest TT
  WHERE TT.FId=T.FId
  FOR XML PATH(''), TYPE
 ).value('.','varchar(max)'),1,2,''
)
FROM tblTest T
GROUP BY T.FId
ORDER BY T.FId;
9 авг 16, 14:23    [19520303]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ErikI,

CTE тоже можно прикрутить. Но тормозить же будет.
9 авг 16, 14:24    [19520309]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
А FOR XML PATH будет меньше?
9 авг 16, 14:28    [19520326]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ErikI
А FOR XML PATH будет меньше?
Думаю, да.
9 авг 16, 14:29    [19520334]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
ErikI
А FOR XML PATH будет меньше?
Думаю, да.
А если выкинуть value(), то вообще летать будет.
Но если в FName есть спецсимволы XML, то не очень хорошо получится.
Имею в виду замену "<" -> "<" и т.п.
9 авг 16, 14:33    [19520345]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
Так у меня изначально не XML. Как выкинуть value ?
9 авг 16, 14:36    [19520355]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
iap
пропущено...
Думаю, да.
А если выкинуть value(), то вообще летать будет.
Но если в FName есть спецсимволы XML, то не очень хорошо получится.
Имею в виду замену "<" -> "<" и т.п.
Надо же, тут форум тоже заменяет одно на другое! :))
9 авг 16, 14:36    [19520357]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ErikI
Так у меня изначально не XML. Как выкинуть value ?
Если там есть или могут быть символы "<", ">", "&" и т.п., то стоит оставить.
9 авг 16, 14:40    [19520367]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
ErikI
Member

Откуда:
Сообщений: 162
Нашел еще вариант:
SELECT Chars = STUFF(CAST((
	SELECT [text()] = ', ' + [Char]
	FROM dbo.Chars
	FOR XML PATH(''), TYPE) AS VARCHAR(100)), 1, 2, '')

Как её применить?
9 авг 16, 14:50    [19520417]     Ответить | Цитировать Сообщить модератору
 Re: Перенос LIASTADD  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ErikI
Нашел еще вариант:
SELECT Chars = STUFF(CAST((
	SELECT [text()] = ', ' + [Char]
	FROM dbo.Chars
	FOR XML PATH(''), TYPE) AS VARCHAR(100)), 1, 2, '')


Как её применить?
Помнится, этот cast не поможет:
SELECT CAST((SELECT [text()] = '<'	FOR XML PATH(''), TYPE) AS VARCHAR(100))
9 авг 16, 14:55    [19520453]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить