大家好,你真棒SQL人案例當跨越2臺(3列)在不工作
我從實時數據庫中的數據移動到一個臨時報告數據庫中的select語句存在(即將成爲DW )。
我遇到了一個數據完整性問題,我正在努力清理。
下表(從源分貝)參與:
-
[包裝和尺寸]:這個包含產品信息。
-
[銷售期刊]:這包含產品的銷售。
它應該做的:
如果有[銷售雜誌] [包代碼],它並在產品表中存在,它應該返回[銷售雜誌。 ] [包裝代碼]。
如果沒有一個[銷售雜誌]。[包代碼]和[銷售雜誌]。[產品編號]在產品表中確實存在,它應該返回[銷售期刊]。[產品編號]。
如果[銷售雜誌]。[包代碼]和[銷售雜誌]。[產品編號]不會在[包裝及規格]表中存在(。[包裝和規格] [產品編號])應該返回0
問題:
當前,點3返回 [銷售期刊]。[產品代碼]而不是0,如果該產品不存在。
問題(S):
-
我在哪裏做的錯誤,我怎麼能得到我想要的結果嗎?
這裏是我實際的代碼,但有問題的部分是CASE表達式:
SELECT CONVERT(CHAR(8), [Date & Time], 112) AS DateID,
CONVERT(TIME, [Date & Time]) AS [Time],
--,CASE WHEN ISNULL([Pack Code],'') = '' THEN [Product Code] ELSE [Pack Code] END AS [ProductCode] <-- Old line
CASE
WHEN ISNULL([Pack Code], '') = ''
THEN CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Product Code] = ps.[Product Code]
)
THEN [Product Code]
ELSE '0'
END
ELSE CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Pack Code] = ps.[Product Code]
)
THEN [Pack Code]
ELSE CASE
WHEN EXISTS
(
SELECT ps.[Product Code]
FROM [Packaging and Sizes] ps
WHERE [Product Code] = ps.[Product Code]
)
THEN [Product Code]
ELSE '0'
END
END
END AS [ProductCode],
[Quantity],
[Pack Size],
[Landed Cost],
[Sales Tax],
[Line Total],
[Transaction Tracking Number]
FROM [Sales Journal]
PS。這將用於並插入到報告數據庫中。
樣本數據:
CREATE TABLE [dbo].[Packaging and Sizes](
[Link Code] [nvarchar](16) NULL,
[Product Code] [nvarchar](16) NOT NULL,
[Base Product] [bit] NULL
) ON [PRIMARY]
INSERT INTO [dbo].[Packaging and Sizes] ([Link Code],[Product Code],[Base Product])
VALUES('100001','100001',1)
VALUES('100002','100002',1)
VALUES('100003','100003',1)
VALUES('100005','100005',1)
VALUES('100007','600100003',0)
VALUES('100007','100007',1)
VALUES('100008','100008',1)
VALUES('100008','600100066',0)
VALUES('100009','100009',1)
VALUES('100010','100010',1)
VALUES('100010','600100022',0)
GO
CREATE TABLE [dbo].[Sales Journal](
[Line Number] [int] IDENTITY(1,1) NOT NULL,
[Date & Time] [datetime] NULL,
[User Number] [smallint] NULL,
[Account Number] [nvarchar](16) NULL,
[Product Code] [nvarchar](16) NULL,
[Pack Code] [nvarchar](16) NULL,
[Department Number] [smallint] NULL,
[Quantity] [real] NULL,
[Pack Size] [real] NULL,
[Landed Cost] [real] NULL,
[Sales Tax] [real] NULL,
[Discount] [real] NULL,
[Dicount Value] [real] NULL,
[Line Total] [real] NULL,
[Transaction Tracking Number] [decimal](19, 6) NULL,
[Branch Number] [tinyint] NULL,
[Discount Type] [tinyint] NULL
) ON [PRIMARY]
INSERT INTO [dbo].[Sales Journal]
([Date & Time],[User Number],[Account Number],[Product Code],[Pack Code],
[Department Number],[Quantity],[Pack Size],[Landed Cost],[Sales Tax],[Discount],
[Dicount Value],[Line Total],[Transaction Tracking Number],[Branch Number],[Discount Type])
VALUES (42728.4482870023,0,'','100001','600100001',1239,1,1,20.553,3.560175,0,0,28.99,1.002,1,0)
VALUES (42728.4486573727,0,'','100002','',1237,1,1,8.114,1.350877,0,0,11,1.003,1,0)
VALUES (42728.4499883912,0,'','100003','',1071,1,1,9.2879,2.086491,0,0,16.99,2.003,1,0)
VALUES (42728.4499999653,0,'','100003','',1071,1,1,9.2879,2.086491,0,0,16.99,2.003,1,0)
VALUES (42728.4500346875,0,'','100004','',1038,1,1,3.6978,0.8584211,0,0,6.99,2.003,1,0)
VALUES (42728.4500462963,0,'','100004','',1038,1,1,3.6978,0.8584211,0,0,6.99,2.003,1,0)
VALUES (42728.4515045949,0,'','100005','',1059,1,1,7.0653,1.595263,0,0,12.99,3.003,1,0)
VALUES (42728.4515624653,0,'','100006','600100002',1239,1,1,18.298,3.191754,0,0,25.99,3.003,1,0)
VALUES (42728.4515740741,0,'','100006','600100002',1239,1,1,18.298,3.191754,0,0,25.99,3.003,1,0)
VALUES (42728.4525578704,0,'','100007','600100003',1239,1,1,20.5512,3.192982,0,0,26,4.003,1,0)
VALUES (42728.4526735764,0,'','100008','',1210,1,1,9.5291,2.147895,0,0,17.49,4.003,1,0)
VALUES (42728.4543055556,0,'','100009','',1189,1,1,5.5,0,0,0,9.99,2.002,1,0)
VALUES (42728.4543170949,0,'','100010','',1189,1,1,5.5,0,0,0,9.99,2.002,1,0)
VALUES (42728.4543518519,0,'','100010','600100004',1078,1,1,2.3,0.49,0,0,3.99,2.002,1,0)
VALUES (42728.4543633912,0,'','100010','600100022',1078,1,1,2.3,0.49,0,0,3.99,2.002,1,0)
GO
這是一個案例表達式,而不是case語句。 – jarlh
謝謝,修復它。 – Petri
請編輯您的問題,以包含樣本數據爲DDL + DML,您的當前輸出和所需輸出。 –