如何解决Oracle中如何将列转换为行
我有如下数据,正在尝试在 Oracle 中将列转换为行。但我收到“Pivot 是一个无效的标识符”。
示例源数据:
DEPTNO DEPTNAME SAL
10 HR 1000
10 ACCOUNTS 2000
20 HR 3000
20 ACCOUNTS 4000
10 CLERK 5000
预期输出:
DEPTNO HR ACCOUNTS CLERK
10 1000 2000 5000
20 3000 4000
我尝试在查询下方运行,但以错误结束。请帮我解决这个问题。
select *
from table( pivot(' select deptno,job,SAL
from emp
group
by deptno,job
')
)
错误:
PIVOT 是无效的修饰符。
解决方法
您的 pivot
声明是错误的。您可能正在寻找的是:
select *
from table
pivot (sum(SAL) for DEPTNAME in ('HR','ACCOUNTS','CLERK'))
order by 1
,
使用条件聚合:
library(raster)
library(terra)
library(purrr)
library(lme4)
f <- system.file("external/test.grd",package="raster")
r1 <- raster(f)
r2 <- calc(r1,fun=function(x){ x[x < 500] <- NA; return(x)} )
r1 <- calc(r1,fun=function(x){ x[x > 1200] <- NA; return(x)} )
raste <- rast(r1)
rNA <- terra:: global(!(is.na(raste)),sum,na.rm=TRUE)
print(paste0("Non-NA of r1",rNA))
raste <- rast(r2)
rNA <- terra:: global(!(is.na(raste)),na.rm=TRUE)
print(paste0("Non-NA of r2",rNA))
Y_ <- purrr:: rbernoulli(150,p = 0.4)
Y <- ifelse(Y_=='TRUE',1,0)
#Genrates the years for the random intercept
years <- as.character(rdunif(150,b=5,a=1))
r1_ <- rnorm(150,800,sd=50)
r2_ <- rnorm(150,1000,sd=50)
my_data <- as.data.frame(cbind(Y,r1_,r2_,years))
colnames(my_data) <- c("Y","r1","r2","years")
my_data$r1 <- as.numeric(as.character(my_data$r1))
my_data$r2 <- as.numeric(as.character(my_data$r2))
my_preds_Logit <- c("r1","r2")
MODEL_FORM_GLM_Model <- paste0('Y ~',paste(my_preds_Logit,collapse = "+"),paste0('+ (1 | years)'),collapse = "+")
GLMM_MODEL_Model_ <- glmer(as.formula(MODEL_FORM_GLM_Model),data = my_data,family=binomial(link="logit"),control=glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=150000)))
r <- raster::stack(r1,r2)
names(r) <- c('r1','r2')
projection <- predict(r,GLMM_MODEL_Model_,type='response',re.form=NA)
raste <- rast(projection)
rNA <- terra:: global(!(is.na(raste)),rNA))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。