我正在使用Sybase V11,我遇到了一个问题,希望你能帮助我。
我有3种与这些产品相关的产品和服务。它们分为3个表,一个用于产品,一个用于服务,一个用于关系。
产品:
IdProducto Nombre
[char ] [char ]
---------- --------------------
1 Telemática Conductor
2 Telemática Empresas
3 EComparte
服务:
IdServicio Nombre Precio
[char ] [char ] [money
1 Dongle 10.50
2 Fleet Intelligence 5.00
3 App. Móvil 3.00
4 App. Gestor 13.75
5 Web Usuarios 13.75
6 Id Conductor 7.50
关系:
IdProducto IdServicio Opcional
[char ] [char ] [bit ]
1 1 0
1 3 0
2 1 0
2 2 0
2 3 1
2 6 1
3 1 0
3 4 0
3 5 0
3 6 0
3 2 1
我想要实现的是这样但动态的:
Name Price
[char ] [money
EComparte 45.50
EComparte / Fleet Intelligence 50.50
Telemática Conductor 13.50
Telemática Empresas 15.50
Telemática Empresas / App. Móvil 18.50
Telemática Empresas / App. Móvil / Id Conductor 26.00
Telemática Empresas / Id Conductor 23.00
获取产品包列表和可选服务。
我做的是使用临时表:
create table #temp(
Libelle varchar(50) NULL,
Montant TypMonnaie NULL)
insert into #temp
select TP.Nombre, SUM(TS.Precio)
from SPEESP..TelProductos TP, SPEESP..TelProductosServicios TPS, SPEESP..TelServicios TS
where TP.IdProducto = TPS.IdProducto and TPS.IdServicio = TS.IdServicio
and TPS.Opcional = 0
group by TP.Nombre
insert into #temp
select Libelle = t.Libelle + ' / ' + TS.Nombre, Montant = t.Montant + TS.Precio
from #temp t, SPEESP..TelProductos TP, SPEESP..TelProductosServicios TPS, SPEESP..TelServicios TS
where TP.IdProducto = TPS.IdProducto and TPS.IdServicio = TS.IdServicio and TP.Nombre = t.Libelle
and TPS.Opcional = 1
通过这些查询,我得到了:
Libelle Montant
[char ] [money
EComparte 45.50
EComparte / Fleet Intelligence 50.50
Telemática Conductor 13.50
Telemática Empresas 15.50
Telemática Empresas / App. Móvil 18.50
Telemática Empresas / Id Conductor 23.00
但我不知道如何获得这一行:
Telemática Empresas / App. Móvil / Id Conductor 26.00
无论如何,它必须是动态的。就像稍后添加可选服务一样,必须返回新行。 喜欢:
Telemática Empresas / App. Móvil / Id Conductor / New Service 26.00 + New Price
我真的很感激你能给我的任何帮助。
此致 亨利
答案 0 :(得分:0)
自从你提出这个问题已经有一段时间了但是如果有人发现它,下面的主题可能会有所帮助。
How to use GROUP BY to concatenate strings in SQL Server?
基本上,您使用FOR XML功能来STUFF列,其中包含由GROUP BY聚合的其他字段。
以下引用来自用户Kevin Fairchild
SELECT
[ID],
STUFF((
SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX))
FROM #YourTable
WHERE (ID = Results.ID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID
根据需要进行调整以适应您的情况。我希望至少能让你或其他人朝着正确的方向前进!