1、DDL操作
1.1、建表
CREATE TABLE IF NOT EXISTS public.pro_salary_quota (
id varchar(50) NOT NULL,
working_process_type int4 NOT NULL,
working_process_id varchar(50) NULL,
valuation_unit int4 NOT NULL,
unit_price numeric(20, 2) NOT NULL,
factory_id varchar(50) NULL,
remark varchar(50) NULL,
create_userid varchar(50) NULL,
modify_userid varchar(50) NULL,
create_username varchar(50) NULL,
modify_username varchar(50) NULL,
create_date timestamp NULL,
modify_date timestamp NULL,
is_deleted bool NOT NULL,
autoincrm_id serial4 NOT NULL,
CONSTRAINT pro_salary_quota_pkey PRIMARY KEY (id)
);
COMMENT ON TABLE public.pro_salary_quota IS '定额配置主表';
COMMENT ON COLUMN public.pro_salary_quota.id IS '主键Id';
COMMENT ON COLUMN public.pro_salary_quota.working_process_type IS '工序类型:1-构件工序,2-零件工序';
COMMENT ON COLUMN public.pro_salary_quota.working_process_id IS '工序id';
COMMENT ON COLUMN public.pro_salary_quota.valuation_unit IS '核价单位';
COMMENT ON COLUMN public.pro_salary_quota.unit_price IS '单位单价';
COMMENT ON COLUMN public.pro_salary_quota.factory_id IS '工厂id';
COMMENT ON COLUMN public.pro_salary_quota.remark IS '备注';
COMMENT ON COLUMN public.pro_salary_quota.create_userid IS '创建人ID';
COMMENT ON COLUMN public.pro_salary_quota.modify_userid IS '修改人ID';
COMMENT ON COLUMN public.pro_salary_quota.create_username IS '创建人';
COMMENT ON COLUMN public.pro_salary_quota.modify_username IS '修改人';
COMMENT ON COLUMN public.pro_salary_quota.create_date IS '创建日期';
COMMENT ON COLUMN public.pro_salary_quota.modify_date IS '修改日期';
COMMENT ON COLUMN public.pro_salary_quota.is_deleted IS '是否删除';
COMMENT ON COLUMN public.pro_salary_quota.autoincrm_id IS '自增ID,排序使用';
1.2、表增加字段
ALTER TABLE public.pro_salary_quota ADD IF NOT EXISTS weigh_warning_threshold numeric(20, 2) NULL;
COMMENT ON COLUMN public.pro_factory.weigh_warning_threshold IS '过磅预警阈值';
1.3、表删除字段
ALTER TABLE public.pro_salary_quota DROP IF EXISTS tare;
1.4、表修改字段不可为null
ALTER TABLE public.materiel_raw_store_sub alter in_store_count set not NULL;
1.5、表修改字段可为null
ALTER TABLE public.materiel_raw_store_sub alter in_store_weight drop not NULL;
2、常用日期格式
select current_date;
select current_time
select now();
select current_timestamp
select now()::timestamp without time zone
select date_part('day', current_timestamp)
SELECT to_char(now(),'yyyy-MM-dd hh24');
SELECT to_char(now(),'yyyy-MM-dd hh24:MI');
SELECT to_char(now(),'yyyy-MM-dd hh24:MI:ss');
select to_char(current_date,'yyyymmdd');
select to_char(current_date,'yyyy年mm月dd日');
select date_trunc('month',now());
select date_trunc('month',now()) +interval '1 month' -interval '1 day';
select date_part('month', current_timestamp)
select date_trunc( 'year', now() );
select date_trunc( 'year', now() )+interval '1 year' -interval '1 day';
select date_part('year', current_timestamp);
select now() - interval '1 day';
SELECT to_char(now() - interval '1 day','yyyy-MM-dd hh24:MI:ss');
select now() - interval '1 week';
select now() - interval '1 month';
select now() - interval '1 year';
3、语法
3.1、行转列(交叉表)
select split_part(code, '~', 1) as Project_Name, split_part(code, '~', 2) as Project_Code, split_part(code, '~', 3) as Area_Name, "ZGJ" , "LGJ" , "CGJ" , "HHZ" , "RHZ" , "SC" , "total"
from crosstab('
select project_name||''~'' || project_code ||''~''||area_name,type, yield
from(
select max(e.short_name) as project_name, a.project_code, max(case when coalesce(d.parentid,'''')='''' then d.name else concat(ppa.name,''/'', d.name) end) as area_name, a.sys_project_id, a.type,
a.category_value,round(sum(a.yield * a.component_count) / max(coalesce(f.proportion,1)),3) as yield, max(f.unit) as unit
from pro_produced_component a
left join pro_factory pf on a.factory_id = pf.id
left join pro_component_type b on a.type = b.code and coalesce(pf.company_id, '''') = coalesce(b.company_id, '''')
left join pro_project_area d on a.area_id = d.id
left join pro_project_area ppa on d.parentid = ppa.id
left join pro_project e on a.sys_project_id = e.sys_project_id
left join plm_professional_type f on a.category_value = f.code and coalesce(pf.company_id, '''') = coalesce(f.company_id, '''')
where a.is_deleted = false and a.category_value = ''Steel'' and a.factory_id=''091ff09b-5944-4391-94d8-22d062c8b8df'' and a.create_date between ''2023/3/17 0:00:00'' and ''2023/4/17 0:00:00''
group by a.sys_project_id, a.project_code, a.area_id, a.type, a.category_value
union all
--合计
select max(e.short_name) as project_name, a.project_code, max(case when coalesce(d.parentid,'''')='''' then d.name else concat(ppa.name,''/'', d.name) end) as area_name, a.sys_project_id, ''total''::text ,
a.category_value,round(sum(a.yield * a.component_count) / max(coalesce(f.proportion,1)),2) as yield, max(f.unit) as unit
from pro_produced_component a
left join pro_factory pf on a.factory_id = pf.id
left join pro_component_type b on a.type = b.code and coalesce(pf.company_id, '''') = coalesce(b.company_id, '''')
left join pro_project_area d on a.area_id = d.id
left join pro_project_area ppa on d.parentid = ppa.id
left join pro_project e on a.sys_project_id = e.sys_project_id
left join plm_professional_type f on a.category_value = f.code and coalesce(pf.company_id, '''') = coalesce(f.company_id, '''')
where a.is_deleted = false and a.category_value = ''Steel'' and a.factory_id=''091ff09b-5944-4391-94d8-22d062c8b8df'' and a.create_date between ''2023/3/17 0:00:00'' and ''2023/4/17 0:00:00''
group by a.sys_project_id, a.project_code, a.area_id, a.category_value
) c
where 1= 1
order by 1, 2 ',
$$ values ('ZGJ'::text), ('LGJ'::text), ('CGJ'::text), ('HHZ'::text), ('RHZ'::text), ('SC'::text), ('total'::text)$$)
as ct (code text, "ZGJ" numeric, "LGJ" numeric, "CGJ" numeric, "HHZ" numeric, "RHZ" numeric, "SC" numeric, "total" numeric)
order by 1
3.2、串表删除
delete from AAA a
using BBB b,CCC c
where a.id=b.aid and b.id=c.bid and a.id=c.aid
3.3、串表更新
update AAA a
set a.name='eago'
from BBB b
inner join CCC c on b.id=c.bid
where b.aid=a.id and c.aid=a.id