Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 行-列遍历_Sql_Hana - Fatal编程技术网

Sql 行-列遍历

Sql 行-列遍历,sql,hana,Sql,Hana,我有以下格式的数据 id idnew 1 2 3 4 2 4 7 6 8 7 结果应该是这样的 ID后面应该跟idnew 1 2 3 4 2 4 7 6 8 7 Thanks in advance 这应维持秩序: SELECT id FROM ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNu

我有以下格式的数据

id      idnew
 1       2
 3       4
 2       
 4       7
 6       8
 7
结果应该是这样的

ID后面应该跟idnew

 1
 2
 3
 4
 2
 4
 7
 6
 8
 7       


Thanks in advance

这应维持秩序:

 SELECT id
   FROM (
        SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
          FROM myTable
         UNION ALL
        SELECT idnew, ROW_NUMBER() OVER (ORDER BY idnew) + 
               (SELECT COUNT(*) FROM dbo.myTable) AS RowNumber
          FROM myTable
         WHERE idnew IS NOT NULL
        ) a
  ORDER BY RowNumber
我假设id列不能为NULL

注意:如果要保留idnew列中的空值并保持顺序,请在第二个select中删除WHERE子句和order BY id:

 SELECT id
   FROM (
        SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
          FROM myTable
         UNION ALL
        SELECT idnew, ROW_NUMBER() OVER (ORDER BY id) + 
               (SELECT COUNT(*) FROM dbo.myTable) AS RowNumber
          FROM myTable
        ) a
  ORDER BY RowNumber

这应维持秩序:

 SELECT id
   FROM (
        SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
          FROM myTable
         UNION ALL
        SELECT idnew, ROW_NUMBER() OVER (ORDER BY idnew) + 
               (SELECT COUNT(*) FROM dbo.myTable) AS RowNumber
          FROM myTable
         WHERE idnew IS NOT NULL
        ) a
  ORDER BY RowNumber
我假设id列不能为NULL

注意:如果要保留idnew列中的空值并保持顺序,请在第二个select中删除WHERE子句和order BY id:

 SELECT id
   FROM (
        SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
          FROM myTable
         UNION ALL
        SELECT idnew, ROW_NUMBER() OVER (ORDER BY id) + 
               (SELECT COUNT(*) FROM dbo.myTable) AS RowNumber
          FROM myTable
        ) a
  ORDER BY RowNumber

这是经过充分测试的,请在此处尝试:

如您所述设置表格:

   CREATE TABLE myTable (id INT, idnew INT);

   INSERT INTO myTable (id, idnew)
   VALUES (1, 2),
          (3, 4),
          (2, NULL),
          (4, 7),
          (6, 8),
          (7, NULL);

   SELECT * FROM myTable;
下面是执行此技巧的查询:

   SELECT mixed_id FROM
   (
       SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num,
              id,
              idnew
       FROM myTable
   ) AS x
   UNPIVOT
   (
       mixed_id for item in (id, idnew)
   ) AS y
   WHERE mixed_id IS NOT NULL
   ORDER BY row_num, mixed_id;

为了不使查询进一步复杂化,这是在利用“id”作为字符串排在“idnew”之前。我相信字符串排名不是这里的关键问题。

这是经过充分测试的,请在这里尝试:

如您所述设置表格:

   CREATE TABLE myTable (id INT, idnew INT);

   INSERT INTO myTable (id, idnew)
   VALUES (1, 2),
          (3, 4),
          (2, NULL),
          (4, 7),
          (6, 8),
          (7, NULL);

   SELECT * FROM myTable;
下面是执行此技巧的查询:

   SELECT mixed_id FROM
   (
       SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num,
              id,
              idnew
       FROM myTable
   ) AS x
   UNPIVOT
   (
       mixed_id for item in (id, idnew)
   ) AS y
   WHERE mixed_id IS NOT NULL
   ORDER BY row_num, mixed_id;
为了不使查询进一步复杂化,这是在利用“id”作为字符串排在“idnew”之前。我相信字符串排名不是这里的关键问题。

使用交叉应用

;WITH CTE (id,idnew)
AS
(
SELECT 1,2      UNION ALL
SELECT 3,4      UNION ALL
SELECT 2,NULL   UNION ALL
SELECT 4,7      UNION ALL
SELECT 6,8      UNION ALL
SELECT 7,NULL
)
SELECT New 
FROM CTE
CROSS APPLY ( VALUES (id),(idnew))AS Dt (New)
WHERE dt.New IS NOT NULL
结果

New
---
1
2
3
4
2
4
7
6
8
7
使用交叉应用

;WITH CTE (id,idnew)
AS
(
SELECT 1,2      UNION ALL
SELECT 3,4      UNION ALL
SELECT 2,NULL   UNION ALL
SELECT 4,7      UNION ALL
SELECT 6,8      UNION ALL
SELECT 7,NULL
)
SELECT New 
FROM CTE
CROSS APPLY ( VALUES (id),(idnew))AS Dt (New)
WHERE dt.New IS NOT NULL
结果

New
---
1
2
3
4
2
4
7
6
8
7

如果您的
订购人
中没有要使用的字段,我不确定这将如何工作。如果您的
订购人
中没有要使用的字段,我不确定这将如何工作。这一顺序将与预期结果不同。这就是这个问题的问题所在-如果不指定
orderby
子句,如果没有它的任意性,+1用于贡献和使用
union all
,则无法保证结果的顺序。您可能需要使用
where
子句从
idnew
中排除一些
null
记录。此处的顺序是关键的。好吧,我没有意识到顺序是关键的。其顺序与预期结果不同。这就是这个问题的问题所在-如果不指定
orderby
子句,如果没有它的任意性,+1用于贡献和使用
union all
,则无法保证结果的顺序。您可能需要使用
where
子句从
idnew
中排除一些
null
记录。此处的顺序是关键的OK,我没有意识到顺序是关键的这一事实。