如何连接不同表中的列

时间:2014-02-28 11:06:04

标签: sql tsql sybase sqlanywhere

我正在使用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

我真的很感激你能给我的任何帮助。

此致 亨利

1 个答案:

答案 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

根据需要进行调整以适应您的情况。我希望至少能让你或其他人朝着正确的方向前进!