2013-05-20 1 views
0

Я довольно новичок, когда речь заходит о T-SQL, и я не могу понять этот запрос.Запрос T-SQL - возврат одного результата или возврат 0 (SQL 2008R2)

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

Мне нужен запрос, для всех текущих запасов, вычесть поле «Сумма» элемента «Лекарство» в поле «Значение товара» элемента. Существует несколько Записей предметов, они должны вычесть сумму из записи в книге, которая открыта. Если вход в Open Ledger отсутствует, вместо этого вычесть нуль.

Я разделывал вместе запрос в конструкторе запросов извинения за разгильдяйство:

SELECT dbo.[Company$ItemTable].[Item No_], 
     dbo.[Company$ItemTable].[Current Stock], 
     dbo.[Company$ItemTable].[Item Value], 
     dbo.[Company$Item Ledger Entry].[Open], 
     dbo.[Company$ItemTable].[Item Value] - SUM(CASE 
                WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount 
                ELSE 0 
                END) AS Diff, 
     SUM(CASE 
      WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount 
      ELSE 0 
      END)          AS AmountILE, 
     dbo.[Company$Item Ledger Entry].[Entry No_] 
FROM dbo.[Company$ItemTable] 
     LEFT OUTER JOIN dbo.[Company$Item Ledger Entry] 
     ON dbo.[Company$ItemTable].[Item No_] = dbo.[Company$Item Ledger Entry].[Lot No_] 
GROUP BY dbo.[Company$ItemTable].[Item No_], 
      dbo.[Company$ItemTable].[Current Stock], 
      dbo.[Company$ItemTable].[Item Value], 
      dbo.[Company$Item Ledger Entry].[Open], 
      dbo.[Company$Item Ledger Entry].[Entry No_] 
HAVING (dbo.[Company$ItemTable].[Current Stock] = 1) 
     AND (dbo.[Company$ItemTable].[Item Value] - SUM(CASE 
                  WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount 
                  ELSE 0 
                 END) > 1) 
     AND (dbo.[Company$Item Ledger Entry].[Open] = 1) 

Имеет ли это смысл? Может ли кто-нибудь помочь? Благодаря!

+1

Вам необходимо задать конкретный вопрос. Прямо сейчас, неясно, каков ваш вопрос и какой правильный ответ на него будет выглядеть. – RBarryYoung

+0

Извините, Я хочу вернуть значение ([ItemTable]. [Item Value] - [Item Ledger Entry]. [Amount]) как «Diff». Если в фильтрах нет записи элемента входа (IE - No 'Open' Entries), верните 0. Имеет ли это смысл? – user2401849

+0

Разве ваш запрос выше не делает этого? – RBarryYoung

ответ

0

Ваша структура таблицы неясна. Я могу догадаться, что вы имеете в виду. Is dbo. [Company $ ItemTable]. [Item No_] уникален в таблице? Является ли dbo. [Компания $ ItemTable] относится к dbo. [Company $ Item Ledger Entry] как один ко многим?

Если да, то

SELECT 
    items.[Item No_], 
    items.[Current Stock], 
    items.[Item Value], 
    items.[Item Value] - ISNULL(le.OpenAmount, 0) AS Diff, 
    ISNULL(le.OpenAmount, 0) AS AmountILE 
FROM dbo.[Company$ItemTable] items 
OUTER APPPLY 
(
    SELECT SUM(e.Amount) 
    FROM dbo.[Company$Item Ledger Entry] e 
    WHERE items.[Item No_] = e.[Lot No_] 
    AND e.[Open] = 1 
) le(OpenAmount) 
WHERE items.[Current Stock] = 1 
Смежные вопросы