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