Member 7870345
Пожалуйста, попробуйте:
SELECT b1.*,
CASE WHEN (b1.amt=b2.amt) THEN 'Y'
ELSE 'N' END AS 'Balance'
FROM bankdata b1
JOIN bankdata b2
ON b1.id=b2.id AND (b1.type<>b2.type)
Объяснение:
Нам нужны все столбцы bankdata (в псевдониме запроса b1) и еще один столбец (называемый "баланс") со значением " Y " или " N " в зависимости от того, имеет ли запись с тем же идентификатором, но разным типом одинаковую сумму или нет.
Таким образом, мы соединяем таблицу bankdata с ней самой (но теперь с псевдонимом b2). Этот вход разрешен для соединения заключается в том, что ID в обоих псевдонимов, но, что значение типа различны (так, если значение типа В В1 ЧР, то в ячейке B2 должно быть особым ЧР (то есть доктора), и если значение типа В В1 Д в Б2 должны быть различны доктора (то есть ОК)).
Значение столбца "баланс" может быть оценено с помощью регистра в зависимости от того, будет ли сумма равна или различна в двух псевдонимах.
DJPops
Пожалуйста, найдите приведенный ниже скрипт для таблицы bankdata и customer ,
Как показано в bankdata там будет несколько типов времени DR и CR в которых для одного и того же идентификатора нам нужно
для проверки сумма д = сумма КР .
Означает, что если есть 2 записи для DR и CR как против id 2, то нам нужно сделать сумму DR amt и сумму CR amt, а затем столбец баланса будет иметь 'Y' или 'N', если amt совпадают или не совпадают
ИСПОЛЬЗУЙТЕ [DATADB]
ГО
/****** Объект: таблица [dbo].[BankData] дата сценария: 04-05-2018 3.54.46 вечера ******/
УСТАНОВИТЕ ANSI_NULLS НА
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
УСТАНОВИТЬ ПАРАМЕТР ANSI_PADDING НА
ГО
Создайте таблицу [dbo].[Банковские данные](
[ID] [int] NOT NULL,
[Имя] [nchar](10) NULL,
[Amt] [decimal](18, 0) NULL,
[Type] [char](10) NULL,
[TransId] [int] IDENTITY(1,1) NOT NULL,
[CustId] [int] NULL
) НА [ПЕРВИЧНОМ]
ГО
НАБОР ВЫБРАНО ЗНАЧЕНИЕ ВЫКЛ.
ГО
/****** Объект: таблица [dbo].[Покупатель] Дата написания сценария: 04-05-2018 3.54.46 вечера ******/
УСТАНОВИТЕ ANSI_NULLS НА
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
Создайте таблицу [dbo].[Покупатель](
[CustId] [int] NULL,
[Адрес] [nvarchar](50) NULL
) НА [ПЕРВИЧНОМ]
ГО
Установите IDENTITY_INSERT [dbo].[BankData] ВКЛ.
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (1, N'Yash ', CAST(300 AS Decimal(18, 0)), N'Dr ', 1, 1)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (1, N'Yash ', CAST(300 AS Decimal(18, 0)), N'CR ', 2, 1)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (2, N ' FALE ', CAST(120 AS Decimal(18, 0)), N ' Dr ', 3, 2)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (2, N ' FALE ', CAST(140 AS Decimal(18, 0)), N ' CR ', 4, 2)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) ЗНАЧЕНИЯ (3, N'RAHUL ', CAST(100 AS Decimal(18, 0)), N'CR ', 5, 3)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) ЗНАЧЕНИЯ (3, N'RAHUL ', CAST(100 AS Decimal(18, 0)), N'Dr ', 6, 3)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (4, N'DINESH ', CAST(900 AS Decimal(18, 0)), N'CR ', 7, 4)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (4, N'DINESH ', CAST(900 AS Decimal(18, 0)), N'Dr ', 8, 4)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (2, N ' FALE ', CAST(30 AS Decimal(18, 0)), N ' Dr ', 9, 2)
Вставить [dbo].[BankData] ([ID], [Name], [Amt], [Type], [TransId], [CustId]) Значения (2, N ' FALE ', CAST(130 AS Decimal(18, 0)), N ' Dr ', 10, 2)
Установите IDENTITY_INSERT [dbo].[BankData] выкл.
Вставить [dbo].[Клиент] ([CustId], [Адрес]) Значения (1, N'Mumbai')
Вставить [dbo].[Клиент] ([CustId], [Адрес]) Значения (2, N'Delhi')
Вставить [dbo].[Клиент] ([CustId], [Адрес]) Значения (3, N 'Pune')
Вставить [dbo].[Клиент] ([CustId], [Адрес]) Значения (4, N'Banglore')
Вставить [dbo].[Клиент] ([CustId], [Адрес]) Значения (5, N'Surat')