我有一个查询在4个表中选择多个值但是我只需要两个表上的一个内连接的匹配这是我的查询:
SELECT [dbo].[CHEQUES].Fecha,
[dbo].[TURNOS].Descripcion,
[dbo].[CAPMO].Clave_PDV,
[dbo].[CAPMO].Pla AS Platillo_Id,
[dbo].[CAPMO].Descripcion,
[dbo].[CAPMO].Precio_Neto AS PrecioPlatillo,
[dbo].[CAPMO].Can AS CantidadPlatillo
FROM [dbo].[CAPMO]
INNER JOIN [dbo].[CHEQUES] ON [dbo].[CAPMO].Clave_PDV = [dbo].[CHEQUES].Cla_PDV AND [dbo].[CAPMO].Che = [dbo].[CHEQUES].Che
INNER JOIN [dbo].[PLATILLOS] ON [dbo].[CAPMO].Pla = [dbo].[PLATILLOS].Pla
INNER JOIN [dbo].[TURNOS] ON [dbo].[CHEQUES].Tur = [dbo].[TURNOS].Tur
这是我的
**[dbo].[CHEQUES]:
|Cla_Pdv | Che | Fecha | Tur |**
---------------------------------------------------
| FUEM | 4423 |2016-01-01 | 2 |
---------------------------------------------------
**[dbo].[TURNO]:
|Clave_Pdv | Tur | Descripcion |**
-----------------------------------------------
| FUEM | 1 | DESAYUNOS |
-----------------------------------------------
| FUEM | 2 | COMIDAS |
-----------------------------------------------
| FUEM | 3 | CENAS |
-----------------------------------------------
**[dbo].[CAPMO]:
|Clave_Pdv | Che | Com | Pla | Descripcion | Precio_Neto | Can |**
--------------------------------------------------------------------------------------------------------
| FUEM | 4423 | 1 | 184 | POZ | 85 | 1 |
------------------------------------------------------------------------------------------------------
| FUEM | 4423 | 2 | 184 | POZ | 85 | 1 |
------------------------------------------------------------------------------------------------------
| FUEM | 4423 | 3 | 184 | POZ | 84 | 1 |
------------------------------------------------------------------------------------------------------
**[dbo].[Platillos]:
| Pla | Des | Pre |**
------------------------------------
| 184 | 4423 | 85 |
------------------------------------
| 244 | 4423 | 84 |
------------------------------------
我的实际输出给了我很多数据,它只给我3行数据 这是我的输出数据:
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 244 | AGUA | 84 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 244 | AGUA | 84 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 244 | AGUA | 84 | 1 |
| 2016-01-01 | COMIDAS | 4423 | FUEM | 244 | AGUA | 84 | 1 |
但我需要输出:
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 85 | 2|
| 2016-01-01 | COMIDAS | 4423 | FUEM | 184 | POZ | 84 | 1|
由于我的[dbo] .CAPMO上有3行,但其中1行具有相同的'Pla'值,因此我必须为同一个表'[dbo]增加'Can'项。[CAPMO]'这就是为什么我需要这样的输出,但在我的实际输出中,似乎它乘以四列中的实际值
我做错了什么?
更新
我更新了我的查询,以获得我想要的输出,但我不得不从查询中删除一个表,我将查询更新为:
SELECT [dbo].[CHEQUES].Fecha,
[dbo].[CHEQUES].Che,
[dbo].[CAPMO].Clave_PDV,
[dbo].[CAPMO].Pla AS Platillo_Id,
[dbo].[CAPMO].Descripcion,
[dbo].[CAPMO].Precio_Neto AS PrecioPlatillo,
sum( [dbo].[CAPMO].Can) AS CantidadPlatillo
FROM [dbo].[CAPMO]
Left JOIN [dbo].[Cheques] on [dbo].[Capmo].Che = [dbo].[Cheques].Che
group by [dbo].[CHEQUES].Fecha,[dbo].[CHEQUES].Che, [dbo].[CAPMO].Clave_PDV,[dbo].[CAPMO].Pla,[dbo].[CAPMO].Descripcion,[dbo].[2016_01_01_CAPMO].Precio_Neto
这个新查询使我的输出:
| 2016-01-01 | 4423 | FUEM | 184 | POZ | 85 | 2|
| 2016-01-01 | 4423 | FUEM | 184 | POZ | 84 | 1|
它为我提供了我需要的数据并且正确地增加了数量,但我仍然需要1列与[dbo]匹配。[TURNOS],就像在这个JOIN:
JOIN [dbo].[2016_01_01_TURNOS] ON [dbo].[2016_01_01_CHEQUES].Tur = [dbo].[2016_01_01_TURNOS].Tur
但是在我的查询中添加一个新的连接会增加我的结果,我只需要与[dbo]中的数据列相同的输出。[Turnos],我该怎么做?
答案 0 :(得分:1)
如果您以这种方式进行JOIN,则不应该有重复的信息:
JOIN [dbo].[2016_01_01_TURNOS] ON [dbo].[2016_01_01_CHEQUES].Tur = [dbo].[2016_01_01_TURNOS].Tur
但我认为我们可以这样做:
SELECT [dbo].[CHEQUES].Fecha,
[dbo].[CHEQUES].Che,
[dbo].[CAPMO].Clave_PDV,
[dbo].[CAPMO].Pla AS Platillo_Id,
[dbo].[CAPMO].Descripcion,
[dbo].[CAPMO].Precio_Neto AS PrecioPlatillo,
sum( [dbo].[CAPMO].Can) AS CantidadPlatillo,
Dev.Descripcion
FROM [dbo].[CHEQUES]
INNER JOIN
(
SELECT Cq.Che, t.Descripcion FROM [dbo].[TURNO] t INNER JOIN [dbo].[CHEQUES] Cq ON Cq.Tur = t.tUR
) AS Dev ON Dev.Che = Cheques.Che
Left JOIN [dbo].[CAPMO] on [dbo].[Capmo].Che = [dbo].[Cheques].Che
group by [dbo].[CHEQUES].Fecha,[dbo].[CHEQUES].Che, [dbo].[CAPMO].Clave_PDV,[dbo].[CAPMO].Pla,[dbo].[CAPMO].Descripcion,[dbo].[2016_01_01_CAPMO].Precio_Neto,Dev.Descripcion
让我知道,如果这样做,否则我们可以弄清楚它。