sql按两列pivot
这很容易发生。 您可以通过添加新列来调整表:
ALTER TABLE payments ADD code NUMBER(3);
您继续执行您的业务逻辑–绝对没有问题。 但是,随后(也许在生产中)某些批处理作业失败,因为它对数据类型做出了一些强有力的假设。 即,它假定两个表payments
和payments_archive
具有相同的行类型:
CREATE TABLE payments
(
id NUMBER(18) NOT NULL,
account_id NUMBER(18) NOT NULL,
value_date DATE,
amount NUMBER(25, 2) NOT NULL
);
CREATE TABLE payments_archive
(
id NUMBER(18) NOT NULL,
account_id NUMBER(18) NOT NULL,
value_date DATE,
amount NUMBER(25, 2) NOT NULL
);
由于具有相同的行类型,您可以简单地将一行从一个表移动到另一个表,例如,使用如下查询:
INSERT INTO payments_archive
SELECT * FROM payments
WHERE value_date < SYSDATE - 30;
(并不是说使用上面的语法通常是一个好主意,但这实际上不是一个好主意。但是您明白了)
您现在得到的是:
ORA-00913: too many values
解决的方法很明显,但是可能必须解决此问题的可怜的灵魂不是您,而是必须在数百个列中找出不匹配的列的其他人。 这是(在Oracle中)方法:
使用PIVOT比较两个表!
您当然不能使用PIVOT
而只需从字典视图中的任何一个表中选择所有列: