Select 直到找到 NULL 值
Select Until Find NULL Value
我遇到一个问题,我尝试从列中 select 直到它识别出空值。我不能使用行数,因为我担心添加的新项目会改变行数。因此数据计数不固定,但 3 行为空是固定的。
这是源代码示例
加载到 SSIS 后
SELECT [F1] FROM TEST_TBL WHERE F1 BETWEEN 'MTH' AND NULL
我的计划是 select 从值 MTH 直到找到空列并将其保存到新的 table 中。另一个也是如此,select 从值 YTD 直到它找到空列。
到目前为止我无法解决它而且我在 SQL 中还是新手。谢谢
如果您在 SSIS 流中添加原始 excel 行号并将其存储在 SQL 中,您可以轻松选择所需的行,因为您现在拥有一组有序的行.
设置:
IF OBJECT_ID('tempdb..#Excel') IS NOT NULL
DROP TABLE #Excel
CREATE TABLE #Excel (
ID INT IDENTITY,
CellContent VARCHAR(100))
INSERT INTO #Excel (
CellContent)
VALUES
('MTH'),
('BANK FINANCING'),
('CLR A/C - ERROR'),
('COMPANY/CORPORATE'),
('NULL'),
('NULL'),
('NULL'),
('YTD'),
('Account Type'),
('BANK FINANCING'),
('CLR A/C - ERROR')
解决方法:
DECLARE @v_StartingCellContent VARCHAR(100) = 'MTH' -- Change here the first value you want to be displayed from
DECLARE @v_LowerLimit INT = (SELECT MIN(E.ID) FROM #Excel AS E WHERE E.CellContent = @v_StartingCellContent)
DECLARE @v_HigherLimit INT = (SELECT MIN(E.ID) FROM #Excel AS E WHERE E.ID > @v_LowerLimit AND E.CellContent = 'NULL')
SELECT
*
FROM
#Excel AS T
WHERE
T.ID >= @v_LowerLimit AND
(@v_HigherLimit IS NULL OR T.ID < @v_HigherLimit)
ORDER BY
T.ID
结果:
ID CellContent
1 MTH
2 BANK FINANCING
3 CLR A/C - ERROR
4 COMPANY/CORPORATE
我遇到一个问题,我尝试从列中 select 直到它识别出空值。我不能使用行数,因为我担心添加的新项目会改变行数。因此数据计数不固定,但 3 行为空是固定的。
这是源代码示例
加载到 SSIS 后
SELECT [F1] FROM TEST_TBL WHERE F1 BETWEEN 'MTH' AND NULL
我的计划是 select 从值 MTH 直到找到空列并将其保存到新的 table 中。另一个也是如此,select 从值 YTD 直到它找到空列。
到目前为止我无法解决它而且我在 SQL 中还是新手。谢谢
如果您在 SSIS 流中添加原始 excel 行号并将其存储在 SQL 中,您可以轻松选择所需的行,因为您现在拥有一组有序的行.
设置:
IF OBJECT_ID('tempdb..#Excel') IS NOT NULL
DROP TABLE #Excel
CREATE TABLE #Excel (
ID INT IDENTITY,
CellContent VARCHAR(100))
INSERT INTO #Excel (
CellContent)
VALUES
('MTH'),
('BANK FINANCING'),
('CLR A/C - ERROR'),
('COMPANY/CORPORATE'),
('NULL'),
('NULL'),
('NULL'),
('YTD'),
('Account Type'),
('BANK FINANCING'),
('CLR A/C - ERROR')
解决方法:
DECLARE @v_StartingCellContent VARCHAR(100) = 'MTH' -- Change here the first value you want to be displayed from
DECLARE @v_LowerLimit INT = (SELECT MIN(E.ID) FROM #Excel AS E WHERE E.CellContent = @v_StartingCellContent)
DECLARE @v_HigherLimit INT = (SELECT MIN(E.ID) FROM #Excel AS E WHERE E.ID > @v_LowerLimit AND E.CellContent = 'NULL')
SELECT
*
FROM
#Excel AS T
WHERE
T.ID >= @v_LowerLimit AND
(@v_HigherLimit IS NULL OR T.ID < @v_HigherLimit)
ORDER BY
T.ID
结果:
ID CellContent
1 MTH
2 BANK FINANCING
3 CLR A/C - ERROR
4 COMPANY/CORPORATE