根据条件将行插入 table
insert rows into table based on criteria
假设我有 5 列,其中包含值“A”或“B”
+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 |
+------+------+------+------+------+
| A | A | B | A | B |
| B | A | B | B | A |
+------+------+------+------+------+
我还想为这 5 列分配 ID 号 1 到 5
+----+---------+
| ID | Columns |
+----+---------+
| 1 | Col1 |
| 2 | Col2 |
| 3 | Col3 |
| 4 | Col4 |
| 5 | Col5 |
+----+---------+
如果第一行中的 col1、col2、col4 包含一个 'A',我想在数据库中插入一个新行 table,在这种情况下,有 3 个新行将插入每个包含其各自的 ID 号。
我要插入的 table 应该看起来像这样
+----+----------+----------+----------+----------+
| ID | SomeCol0 | SomeCol1 | SomeCol2 | SomeCol3 |
+----+----------+----------+----------+----------+
| 1 | x | x | x | x |
| 2 | x | x | x | x |
| 4 | x | x | x | x |
+----+----------+----------+----------+----------+
这是针对 VB.NET 应用程序的。我更愿意在 TSQL 中解决这个逻辑,但 VB 代码也可以。我真的不知道该怎么办。非常感谢任何帮助。
假设我们有以下数据:
DECLARE @DataSource TABLE
(
[Col1] CHAR(1)
,[Col2] CHAR(1)
,[Col3] CHAR(1)
,[Col4] CHAR(1)
,[Col5] CHAR(1)
);
INSERT INTO @DataSource ([Col1], [Col2], [Col3], [Col4], [Col5])
VALUES ('A', 'A', 'B', 'A', 'B') -- this should be inserted
,('B', 'A', 'B', 'B', 'B')
,('A', 'A', 'A', 'A', 'B') -- this should be inserted
,('B', 'B', 'B', 'A', 'B');
首先,我们需要根据您的条件筛选行:
SELECT *
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A';
现在,我们需要 UNPIVOT
上面的结果,以便为每一列分配一个 ID
值:
SELECT [ID]
,[Value]
FROM
(
SELECT [Col1] AS [1]
,[Col2] AS [2]
,[Col3] AS [3]
,[Col4] AS [4]
,[Col5] AS [5]
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A'
) DS
UNPIVOT
(
[Value] FOR [ID] IN ([1], [2], [3], [4], [5])
) UNPVT;
最后,只需使用 WHERE
子句过滤 ID
:
SELECT [ID]
,[Value]
FROM
(
SELECT [Col1] AS [1]
,[Col2] AS [2]
,[Col3] AS [3]
,[Col4] AS [4]
,[Col5] AS [5]
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A'
) DS
UNPIVOT
(
[Value] FOR [ID] IN ([1], [2], [3], [4], [5])
) UNPVT
WHERE [ID] IN (1, 2, 4);
假设我有 5 列,其中包含值“A”或“B”
+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 |
+------+------+------+------+------+
| A | A | B | A | B |
| B | A | B | B | A |
+------+------+------+------+------+
我还想为这 5 列分配 ID 号 1 到 5
+----+---------+
| ID | Columns |
+----+---------+
| 1 | Col1 |
| 2 | Col2 |
| 3 | Col3 |
| 4 | Col4 |
| 5 | Col5 |
+----+---------+
如果第一行中的 col1、col2、col4 包含一个 'A',我想在数据库中插入一个新行 table,在这种情况下,有 3 个新行将插入每个包含其各自的 ID 号。
我要插入的 table 应该看起来像这样
+----+----------+----------+----------+----------+
| ID | SomeCol0 | SomeCol1 | SomeCol2 | SomeCol3 |
+----+----------+----------+----------+----------+
| 1 | x | x | x | x |
| 2 | x | x | x | x |
| 4 | x | x | x | x |
+----+----------+----------+----------+----------+
这是针对 VB.NET 应用程序的。我更愿意在 TSQL 中解决这个逻辑,但 VB 代码也可以。我真的不知道该怎么办。非常感谢任何帮助。
假设我们有以下数据:
DECLARE @DataSource TABLE
(
[Col1] CHAR(1)
,[Col2] CHAR(1)
,[Col3] CHAR(1)
,[Col4] CHAR(1)
,[Col5] CHAR(1)
);
INSERT INTO @DataSource ([Col1], [Col2], [Col3], [Col4], [Col5])
VALUES ('A', 'A', 'B', 'A', 'B') -- this should be inserted
,('B', 'A', 'B', 'B', 'B')
,('A', 'A', 'A', 'A', 'B') -- this should be inserted
,('B', 'B', 'B', 'A', 'B');
首先,我们需要根据您的条件筛选行:
SELECT *
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A';
现在,我们需要 UNPIVOT
上面的结果,以便为每一列分配一个 ID
值:
SELECT [ID]
,[Value]
FROM
(
SELECT [Col1] AS [1]
,[Col2] AS [2]
,[Col3] AS [3]
,[Col4] AS [4]
,[Col5] AS [5]
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A'
) DS
UNPIVOT
(
[Value] FOR [ID] IN ([1], [2], [3], [4], [5])
) UNPVT;
最后,只需使用 WHERE
子句过滤 ID
:
SELECT [ID]
,[Value]
FROM
(
SELECT [Col1] AS [1]
,[Col2] AS [2]
,[Col3] AS [3]
,[Col4] AS [4]
,[Col5] AS [5]
FROM @DataSource
WHERE [Col1] = 'A' AND [Col2] = 'A' AND [Col4] = 'A'
) DS
UNPIVOT
(
[Value] FOR [ID] IN ([1], [2], [3], [4], [5])
) UNPVT
WHERE [ID] IN (1, 2, 4);