Postgresql 根据Postgres中的列值选择
我想根据所选的Postgresql 根据Postgres中的列值选择,postgresql,Postgresql,我想根据所选的ID获取TIMESTAMP和STRING\u VALUE的值。 假设我选择的ID是42594226和4259 然后,它应该使用CASE语句为所选的ID选择TIMESTAMP和STRING\u VALUE。 我尝试了下面的查询,但返回错误 CREATE TABLE "DRL_FTO3_DI1_A0" ( "VARIABLE" integer, "CALCULATION" integer, "TIMESTAMP_S" integer, "TIMESTAMP_MS" in
ID
获取TIMESTAMP
和STRING\u VALUE
的值。
假设我选择的ID
是42594226
和4259
然后,它应该使用CASE语句为所选的ID
选择TIMESTAMP
和STRING\u VALUE
。
我尝试了下面的查询,但返回错误
CREATE TABLE "DRL_FTO3_DI1_A0"
(
"VARIABLE" integer,
"CALCULATION" integer,
"TIMESTAMP_S" integer,
"TIMESTAMP_MS" integer,
"VALUE" double precision,
"STATUS" integer,
"GUID" character(36),
"STRVALUE" character varying(50)
)
INSERT INTO "DRL_FTO3_DI1_A0"(
"VARIABLE", "CALCULATION", "TIMESTAMP_S", "TIMESTAMP_MS", "VALUE",
"STATUS", "GUID", "STRVALUE")
VALUES (4226, 0, 1451120925, 329,0 , 1078067200, '', 'BATCH 1'),
(4306, 0, 1451120925, 329,0 , 1078067200, '', 'BATCH 2'),
(4311, 0, 1451120925, 329,0 , 1078067200, '', '2')
现在假设在三个变量(422643064311)中选择4226和4311
SELECT ((TIMESTAMP WITHOUT Time Zone 'epoch' + "TIMESTAMP_S" * INTERVAL '1 second') AT TIME ZONE 'UTC')::TIMESTAMP WITHOUT Time Zone,
SUM(CASE WHEN "VARIABLE" = 4226 Then "STRVALUE" END) as 'A',
SUM(CASE WHEN "VARIABLE" = 4311 Then "STRVALUE" END) as 'B'
FROM "DRL_FTO3_DI1_A0"
GROUP BY "TIMESTAMP_S"
ORDER BY "TIMESTAMP_S";
TIMESTAMP_S A B
2015-12-26 14:38:45 BATCH_1 2
这是使用交叉表的查询,它可以正常工作
选择*
从交叉表(
$$选择“变量”、“时间戳”、“标准值”
来自“DRL_FTO3_DI1_A0”
其中“VARIABLE”=任意(数组[43064226])
以1,2的顺序排列$$
)
作为
t(
“TIMESTAMP_S”整数,
"一个"字,,
“B”字符变化
);我不明白你想做什么。也许示例数据(和错误消息)会有帮助吗?这是我的输出。crosstab()
函数会做你想做的吗?您能告诉我如何在我的案例中编写交叉表的查询吗?这是我尝试使用交叉表时遇到的问题,但导致错误:从交叉表中选择*('SELECT“VARIABLE”,“TIMESTAMP_S”,“STRVALUE”从“DRL_FTO3_DI1_A0”按2的顺序)作为ct(“TIMESTAMP_S”Integer,“A”text,“B”text);