SVG-файл с несколькими одинаковыми идентификаторами недопустим для http://www.w3.org/TR/SVG/struct.html#IDAttribute
. идентификаторы уникальны или перемещают SVG в отдельные файлы и ссылаются на них с помощью тегов или
.
Это должно сработать для вас. Протестировано вплоть до SQL 2000.
create table #user (username varchar(25))
insert into #user (username) values ('Paul')
insert into #user (username) values ('John')
insert into #user (username) values ('Mary')
declare @tmp varchar(250)
SET @tmp = ''
select @tmp = @tmp + username + ', ' from #user
select SUBSTRING(@tmp, 0, LEN(@tmp))
Чистым и гибким решением в MS SQL Server 2005/2008 является создание функции агрегирования CLR.
Вы найдете немало статей (с кодом) на google .
Похоже, эта статья проведет вас через весь процесс с использованием C #.
Если вы выполняете это через PHP, что насчет этого?
$hQuery = mysql_query("SELECT * FROM users");
while($hRow = mysql_fetch_array($hQuery)) {
$hOut .= $hRow['username'] . ", ";
}
$hOut = substr($hOut, 0, strlen($hOut) - 1);
echo $hOut;
хороший обзор нескольких подходов:
Копия статьи -
Coalesce не является ответом на конкатенацию строк в T-SQL. За эти годы я видел много сообщений об использовании функции COALESCE для работы конкатенации строк в T-SQL. Это один из примеров здесь (заимствован из Readifarian Marc Ridey).
DECLARE @categories varchar(200)
SET @categories = NULL
SELECT @categories = COALESCE(@categories + ',','') + Name
FROM Production.ProductCategory
SELECT @categories
Этот запрос может быть весьма эффективным, но необходимо соблюдать осторожность и правильно понимать использование COALESCE. COALESCE - это версия ISNULL, которая может принимать более двух параметров. Он возвращает первое, что не является нулевым в списке параметров. Так что на самом деле это не имеет ничего общего с конкатенацией, и следующий фрагмент кода точно такой же - без использования COALESCE:
DECLARE @categories varchar(200)
SET @categories = ''
SELECT @categories = @categories + ',' + Name
FROM Production.ProductCategory
SELECT @categories
Но неупорядоченный характер баз данных делает это ненадежным. Вся причина, по которой в T-SQL (пока) нет функции конкатенации, заключается в том, что это агрегат, для которого важен порядок элементов. Используя этот метод конкатенации строк с присваиванием переменных, вы можете обнаружить, что возвращаемый ответ не содержит всех значений, особенно если вы хотите, чтобы подстроки располагались в определенном порядке. Рассмотрим следующее, которое на моей машине возвращает только «аксессуары», когда я хотел вернуть «велосипеды, одежда, компоненты, аксессуары»:
DECLARE @categories varchar(200)
SET @categories = NULL
SELECT @categories = COALESCE(@categories + ',','') + Name
FROM Production.ProductCategory
ORDER BY LEN(Name)
SELECT @categories
Намного лучше использовать метод, который учитывает порядок, и который был включен в SQL2005 специально с целью конкатенации строк - FOR XML PATH ('' )
SELECT ',' + Name
FROM Production.ProductCategory
ORDER BY LEN(Name)
FOR XML PATH('')
В недавно опубликованном сообщении о сравнении GROUP BY и DISTINCT при использовании подзапросов я продемонстрировал использование FOR XML PATH (''). Посмотрите на это, и вы увидите, как это работает в подзапросе. Функция 'STUFF' предназначена только для удаления начальной запятой.
USE tempdb;
GO
CREATE TABLE t1 (id INT, NAME VARCHAR(MAX));
INSERT t1 values (1,'Jamie');
INSERT t1 values (1,'Joe');
INSERT t1 values (1,'John');
INSERT t1 values (2,'Sai');
INSERT t1 values (2,'Sam');
GO
select
id,
stuff((
select ',' + t.[name]
from t1 t
where t.id = t1.id
order by t.[name]
for xml path('')
),1,1,'') as name_csv
from t1
group by id
;
FOR XML PATH - одна из немногих ситуаций, в которых вы можете использовать ORDER BY в подзапросе. Другой - ТОП. А когда вы используете безымянный столбец и FOR XML PATH (''), вы получите прямую конкатенацию без тегов XML. Это означает, что строки будут закодированы в HTML, поэтому, если вы объединяете строки, которые могут иметь символ <(и т. Д.), Вам, возможно, следует исправить это позже, но в любом случае это по-прежнему лучший способ объединения строк. в SQL Server 2005.
'). Посмотрите на это, и вы увидите, как это работает в подзапросе. Функция 'STUFF' предназначена только для удаления начальной запятой.USE tempdb;
GO
CREATE TABLE t1 (id INT, NAME VARCHAR(MAX));
INSERT t1 values (1,'Jamie');
INSERT t1 values (1,'Joe');
INSERT t1 values (1,'John');
INSERT t1 values (2,'Sai');
INSERT t1 values (2,'Sam');
GO
select
id,
stuff((
select ',' + t.[name]
from t1 t
where t.id = t1.id
order by t.[name]
for xml path('')
),1,1,'') as name_csv
from t1
group by id
;
FOR XML PATH - одна из немногих ситуаций, в которых вы можете использовать ORDER BY в подзапросе. Другой - ТОП. А когда вы используете безымянный столбец и FOR XML PATH (''), вы получите прямую конкатенацию без тегов XML. Это означает, что строки будут закодированы в HTML, поэтому, если вы объединяете строки, которые могут иметь символ <(и т. Д.), Вам, возможно, следует исправить это позже, но в любом случае это по-прежнему лучший способ объединения строк. в SQL Server 2005.
'). Посмотрите на это, и вы увидите, как это работает в подзапросе. Функция 'STUFF' предназначена только для удаления начальной запятой.USE tempdb;
GO
CREATE TABLE t1 (id INT, NAME VARCHAR(MAX));
INSERT t1 values (1,'Jamie');
INSERT t1 values (1,'Joe');
INSERT t1 values (1,'John');
INSERT t1 values (2,'Sai');
INSERT t1 values (2,'Sam');
GO
select
id,
stuff((
select ',' + t.[name]
from t1 t
where t.id = t1.id
order by t.[name]
for xml path('')
),1,1,'') as name_csv
from t1
group by id
;
FOR XML PATH - одна из немногих ситуаций, в которых вы можете использовать ORDER BY в подзапросе. Другой - ТОП. А когда вы используете безымянный столбец и FOR XML PATH (''), вы получите прямую конкатенацию без тегов XML. Это означает, что строки будут закодированы в HTML, поэтому, если вы объединяете строки, которые могут иметь символ <(и т. Д.), Вам, возможно, следует исправить это позже, но в любом случае это по-прежнему лучший способ объединения строк. в SQL Server 2005.
USE tempdb;
GO
CREATE TABLE t1 (id INT, NAME VARCHAR(MAX));
INSERT t1 values (1,'Jamie');
INSERT t1 values (1,'Joe');
INSERT t1 values (1,'John');
INSERT t1 values (2,'Sai');
INSERT t1 values (2,'Sam');
GO
select
id,
stuff((
select ',' + t.[name]
from t1 t
where t.id = t1.id
order by t.[name]
for xml path('')
),1,1,'') as name_csv
from t1
group by id
;
FOR XML PATH - одна из немногих ситуаций, в которых можно использовать ORDER BY в подзапросе. Другой - ТОП. А когда вы используете безымянный столбец и FOR XML PATH (''), вы получите прямую конкатенацию без тегов XML. Это означает, что строки будут закодированы в HTML, поэтому, если вы объединяете строки, которые могут иметь символ <(и т. Д.), Вам, возможно, следует исправить это позже, но в любом случае это по-прежнему лучший способ объединения строк. в SQL Server 2005.
USE tempdb;
GO
CREATE TABLE t1 (id INT, NAME VARCHAR(MAX));
INSERT t1 values (1,'Jamie');
INSERT t1 values (1,'Joe');
INSERT t1 values (1,'John');
INSERT t1 values (2,'Sai');
INSERT t1 values (2,'Sam');
GO
select
id,
stuff((
select ',' + t.[name]
from t1 t
where t.id = t1.id
order by t.[name]
for xml path('')
),1,1,'') as name_csv
from t1
group by id
;
FOR XML PATH - одна из немногих ситуаций, в которых можно использовать ORDER BY в подзапросе. Другой - ТОП. А когда вы используете безымянный столбец и FOR XML PATH (''), вы получите прямую конкатенацию без тегов XML. Это означает, что строки будут закодированы в HTML, поэтому, если вы объединяете строки, которые могут иметь символ <(и т. Д.), Вам, возможно, следует исправить это позже, но в любом случае это по-прежнему лучший способ объединения строк. в SQL Server 2005.
select
distinct
stuff((
select ',' + u.username
from users u
where u.username = username
order by u.username
for xml path('')
),1,1,'') as userlist
from users
group by username
раньше была опечатка, выше работает