Исключая строки из второй таблицы, но в сравнении - PullRequest
0 голосов
/ 11 июня 2019

У меня есть две таблицы с одинаковыми данными. Мне нужно сравнить один столбец. Это ddl для тестирования.

USE [DifferencesDB]
GO
/****** Object:  Table [dbo].[FirstTable]    Script Date: 11/06/2019 15:27:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[FirstTable](
    [Id] [int] NULL,
    [Column1] [nchar](10) NULL,
    [Column2] [nchar](10) NULL,
    [Column4] [decimal](18, 0) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[FirstTable] ([Id], [Column1], [Column2], [Column4]) VALUES (1, N'test      ', N'test      ', 30)
GO
INSERT [dbo].[FirstTable] ([Id], [Column1], [Column2], [Column4]) VALUES (2, N'test2     ', N'test3     ', 18)
GO

CREATE TABLE [dbo].[SecondTable](
        [Id] [int] NULL,
        [Column1] [nchar](10) NULL,
        [Column2] [nchar](10) NULL,
        [Column4] [decimal](18, 5) NULL
    ) ON [PRIMARY]
    GO
    INSERT [dbo].[SecondTable] ([Id], [Column1], [Column2], [Column4]) VALUES (1, N'test      ', N'test      ', 13.56895)
    GO
    INSERT [dbo].[SecondTable] ([Id], [Column1], [Column2], [Column4]) VALUES (2, N'test2     ', N'test3     ', 18.456 )
    GO

. Как вы видите, я хочу сравнить это с двумя таблицами.и данные в столбце 4, которые являются десятичными.

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT   ABS(T0.Column4 -T1.Column4) as 'Difference'
FROM [FirstTable] T0, [SecondTable] T1
where T0.Id =T1.ID

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

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

.456

Редактировать , чтобы показать, что происходит с живыми данными.

enter image description here

Пожалуйста, посмотрите мой новый запрос здесь

SELECT  GoodData_Lines.Qty,
        Invalid_Lines.Qty,
        abs(GoodData_Lines.Qty- Invalid_Lines.Qty) AS 'Difference'
FROM    GoodData_Lines 
left OUTER JOIN  Invalid_MCSSOPLines 
  ON GoodData_Lines.LineID = Invalid_Lines.LineID

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

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

SELECT  T1.*, ABS(T0.Column4 -T1.Column4) as 'Difference'
FROM [FirstTable] T0 right join [SecondTable] T1
on T0.Id =T1.ID
0 голосов
/ 11 июня 2019

Это может быть решением? [РЕДАКТИРОВАТЬ] после вашего обновления

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GoodData_Lines](
[LineID] [int] NULL,
[Column1] [nchar](10) NULL,
[Column2] [nchar](10) NULL,
[Qty] [decimal](18, 0) NULL
) ON [PRIMARY]
GO

INSERT [dbo].[GoodData_Lines] ([LineID], [Column1], [Column2], [Qty]) VALUES (1, N'test      ', N'test      ', 30)
GO
INSERT [dbo].[GoodData_Lines] ([LineID], [Column1], [Column2], [Qty]) VALUES (2, N'test2     ', N'test3     ', 18)
GO

CREATE TABLE [dbo].[Invalid_MCSSOPLines](
        [LineID] [int] NULL,
        [Column1] [nchar](10) NULL,
        [Column2] [nchar](10) NULL,
        [Qty] [decimal](18, 5) NULL
    ) ON [PRIMARY]
    GO

    INSERT [dbo].[Invalid_MCSSOPLines] ([LineID], [Column1], [Column2], [Qty]) VALUES (1, N'test      ', N'test      ', 13.56895)
    GO
    INSERT [dbo].[Invalid_MCSSOPLines] ([LineID], [Column1], [Column2], [Qty]) VALUES (2, N'test2     ', N'test3     ', 18.456 )
    GO


    SELECT GoodData_Lines.Qty,
           isnull( [Invalid_MCSSOPLines].Qty,0) invalid_qty,
           abs(GoodData_Lines.Qty - isnull([Invalid_MCSSOPLines].Qty,0)) AS 'Difference'
      FROM GoodData_Lines 
           left OUTER JOIN  Invalid_MCSSOPLines 
           ON GoodData_Lines.LineID = [Invalid_MCSSOPLines].LineID


-- eventually drop table if no more needed

-- DROP TABLE [GoodData_Lines]
-- DROP TABLE [Invalid_MCSSOPLines]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...