2016-02-17 99 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

得到它謝謝兄弟 –