我有以下sql语句,如果t2.InventoryStatusCode更改为'p',则该字段旨在为字段t1.DWPostedDateKey赋值。 t1.DWPostedDateKey的起始值为NULL,如果t2.InventoryStatusCode没有改变,我希望它保持为NULL。
select
t1.DateKey,
t1.DWPostedDateKey,
(CASE WHEN t2.InventoryStatusCode = 'p'
and (t1.InventoryStatusKey != t2.InventoryStatusKey) THEN
CONVERT(int, GetDate(), 112)
ELSE
t1.DWPostedDateKey
END)
from table1 t1 inner join
table2 t2 on t1.key = t2.key
问题是我没有得到NULL?以下是结果示例:
DateKey DWPostedDateKey (No column name)
20150413 NULL 42106
20150413 NULL 42106
20150413 NULL 42106
20150413 20150414 20150414
20150413 20150414 20150414
20150413 20150414 20150414
42106在那里做什么?我希望它保持NULL值。
答案 0 :(得分:1)
问题是此行CONVERT(int, GetDate(), 112)
,特别是int
。
当您执行该操作时,它会将datetime
转换为int
和SQL Server,并返回自19/1年1月1日以来的天数。 (这是你看到的数字)
这将返回您需要的内容
CONVERT(varchar, GetDate(), 112)
如果你需要一个整数尝试这个
CAST(CONVERT(varchar, GetDate(), 112) AS INTEGER)
希望这有帮助
答案 1 :(得分:0)
只要我可以测试它,您的SQL代码就能正常工作。您的数据似乎是您获取的是int值而不是NULL值。
如果您将表t1和t2中的行作为此结果集的基础发布,将会有所帮助。
但是,当我重现它时,我只能在更改' InventoryStatus'的值时在第三列中生成一个int。在t2。
declare @table1 table (
[key] int,
DateKey nvarchar(8),
DWPostedDateKey nvarchar(8),
InventoryStatusKey int
)
declare @table2 table (
[key] int,
InventoryStatusKey int,
InventoryStatusCode nvarchar(1)
)
insert into @table1 values (1, N'20150413', NULL, 1)
insert into @table1 values (2, N'20150413', NULL, 1)
insert into @table1 values (3, N'20150413', NULL, 1)
insert into @table1 values (4, N'20150413', N'20150414', 1)
insert into @table1 values (6, N'20150413', N'20150414', 1)
insert into @table2 values (1, 1, 'a')
insert into @table2 values (1, 2, 'a')
insert into @table2 values (3, 2, 'p')
insert into @table2 values (4, 2, 'a')
insert into @table2 values (6, 1, 'a')
select
t1.DateKey,
t1.DWPostedDateKey,
(CASE WHEN
t2.InventoryStatusCode = 'p'
and (t1.InventoryStatusKey != t2.InventoryStatusKey)
THEN
CONVERT(int, GetDate(), 112)
ELSE
t1.DWPostedDateKey
END)
from @table1 t1 inner join
@table2 t2 on t1.[key] = t2.[key]
我从' a'更改了InventoryStatusCode的值。到了' p'结果就是你得到的东西。