SQL JOIN дает удвоенные значения - PullRequest
0 голосов
/ 08 июля 2019

РЕДАКТИРОВАТЬ ---

SQL FIDDLE sqlfiddle.com/#!18/f08bd/4 Я не мог загрузить все данные в это как исчерпание лимита на SQL FIDDLE, но каким-то образом результаты там верны с небольшим количеством образцов данных, но в моей базе данных это удваивается как-то.

Я пытаюсь отобразить общее количество товаров, их вес и цену. Результаты получены из 4 разных таблиц.

Когда я делаю это без соединения, тогда я получаю правильные значения, но когда я использую соединение, тогда я получаю двойные значения на всех выходах.

Без объединения я не могу этого добиться, так как все эти результаты должны быть в одной таблице.

Я пытался не использовать Join, а просто включать эти таблицы в 'FROM', но это приводило к ошибкам при преобразовании в числовые значения. Я также попробовал Союз, но не работал.

Когда я не использую соединение и не пытаюсь отобразить все значения, я получаю желаемый результат, но с пропущенными столбцами, которые я пропустил специально, чтобы проверить это.

SELECT PriceListTest.Description, COUNT(ItemCode) AS Quantity,
   SUM(Weight) AS 'Weight', Item.Pieces, PriceListTest.Price, 
   CAST(SUM( PriceListTest.Price * Weight) as 
  DECIMAL(10,2)) as 'Unit Price', CAST(SUM(PriceListTest.Price * Weight) as 
  DECIMAL(10,2))
  AS 'Nett Amount'
  FROM StockItems 
  INNER JOIN PriceListTest ON
  StockItems.ItemCode = PriceListTest.Description
  INNER JOIN Item ON StockItems.ItemCode = Item.ShortCode 
  WHERE Barcode IN (SELECT DISTINCT Barcode FROM StockOuttbl 
  WHERE ContainedID = 'isr5063' AND Status ='' GROUP BY Barcode) AND 
  PriceListTest.CustomerID = (SELECT DISTINCT CustomerID From Customerstbl 
  WHERE CustomerID ='1')
  GROUP BY PriceListTest.Description, Item.Pieces, PriceListTest.Price;

Статус в этом случае пуст, поэтому проблема не в этом

Я получаю эти значения:

Description Quantity    Weight  Pieces  Price   Unit Price  Nett Amount
MAJ        52         20242 0       1.23        24897.66    24897.66 

FLOCK       50        17206 0       1.23        21163.38    21163.38

Это вывод, который я ищу:

Description Quantity    Weight  Pieces  Price   Unit Price  Nett Amount
MAJ       26            10121   0   1.23    12448.83‬   12448.83 

                                                             ‬
FLOCK       25          8603    0   1.23    10581.69    10581.69

Когда я не использую PriceListTest в Join, я не получаю удвоения, но тогда это не совсем то, что я ищу.

Я получаю:

Description Quantity    Weight  Pieces
MAJ        26       10121   0        

FLOCK       25       8603   0   

РЕДАКТИРОВАТЬ-- Добавлены данные для таблиц

PriceListTest---
OID ShortCode   Description CustomerID  Price
7372    MAJ       MAJ          1        1.23
7373    FLOCK     FLOCK        1        1.23

StockItems---
TimeStamp   DateStamp   ItemCode    Barcode         ID      Weight
104414357   20190701      MAJ   20190701104413935   7198    302
125350401   20190701      MAJ   20190701125349979   7220    360
125507063   20190703      MAJ   20190703125506641   7513    336

StockOutTbl---
ID  AddedTimeStamp  Quant   Line    UserID  Weight  Barcode       Status    Type    StockoutTimeStamp   StockoutUser    TerminalStockOut    TerminalAdded   AddedDateStamp  StockOutDateStamp   ContainedID
41  115020205         NULL  NULL    NULL        336 20190703125506641          NULL       115020208         user 1      TC20                NULL         20190704             20190704           isr5063



Item Table ----
OID ShortCode   ScreenCode  Description AdminOid    Kilos   Pieces  Inactive    CategoryTitleStr    BigBale
203       MAJ          MAJ        MAJ       NULL      0     0     0    45   1
204     FLOCK          FLOCK    FLOCK       NULL      0     0     0    45   1

Извините за плохое форматирование.

Буду признателен за любую помощь в этом. Заранее спасибо!

1 Ответ

0 голосов
/ 08 июля 2019

использовать подзапрос и отличный prcelist из 2-й таблицы в подзапросе, затем использовать соединение и нет необходимости GROUP BY Barcode вставлять ваш подзапрос, потому что вы уже использовали разные

SELECT PriceListTest.Description, COUNT(ItemCode) AS Quantity,
   SUM(Weight) AS 'Weight', Item.Pieces, PriceListTest.Price, 
   CAST(SUM( PriceListTest.Price * Weight) as 
  DECIMAL(10,2)) as 'Unit Price', CAST(SUM(PriceListTest.Price * Weight) as 
  DECIMAL(10,2))
  AS 'Nett Amount'
  FROM StockItems 
  INNER JOIN( select distinct * from  PriceListTest) as PriceListTest ON
  StockItems.ItemCode = PriceListTest.Description
  INNER JOIN Item ON StockItems.ItemCode = Item.ShortCode 
  WHERE Barcode IN (SELECT DISTINCT Barcode FROM StockOuttbl 
  WHERE ContainedID = 'isr5063' AND Status ='' ) AND 
  PriceListTest.CustomerID = (SELECT DISTINCT CustomerID From Customerstbl 
  WHERE CustomerID ='1')
  GROUP BY PriceListTest.Description, Item.Pieces, PriceListTest.Price;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...