查询内部重复数据

时间:2016-02-17 21:59:55

标签: sql sql-server inner-join

我有一个查询在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],我该怎么做?

1 个答案:

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

让我知道,如果这样做,否则我们可以弄清楚它。