2016-02-17 58 views
0

我有一个查询中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| 

由于有3条线在我的[DBO] .CAPMO但其中1具有相同的“解放军”值,所以我必须增加的“外壳”项目为同样的表'[dbo]。[CAPMO]'那就是为什么我需要我的输出,但在我的实际输出中,它似乎将其乘以四列中的实际值

我在做什么错?

UPDATE

我更新我的查询得到公正正是我想要的输出,但我不得不削减一个表我的查询我我的查询更新,以这样的:

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列匹配。ES的[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

如你所知内部联接产生取决于你连接表(行)笛卡尔积,这就是为什么你会看到更多的记录比预期的,有关使用派生表得到你想要的结果,然后再加入必要的什么,或者在查询中删除不必要的表格,只需使用获取输出所需的表格即可。 – jthalliens

+0

即时通讯使用的唯一一个我需要的输出,我需要从4个diferent表,但数据的特定内部联接这个问题应该是我应该如何改变我的查询现场检查和CApmo之间? –

+0

Mysql和ms sql是两种不同的产品。你使用哪一个? – Shadow

回答

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 

让我知道是否可行否则我们可以弄清楚一些事情。

+0

萨尔瓦多查询我ENVIA未错误阙骰子,拉columna “开发。选择列表说明”是无效的,因为它不是在聚合函数或包含在GROUP BY子句 –

+0

请再试一次,错过了最后一部分为聚合函数,这是简单地添加 – jthalliens

+0

得到它谢谢兄弟 –