天道酬勤,学无止境

sql

SQL SELECT ORDER BY 多列取决于其他列的值(SQL SELECT ORDER BY multiple columns depending on value of other column)

问题 我有一个包含以下列的表格: 身份证 | 重温(布尔)| FL(十进制)| FR(十进制) | RL(十进制)| RR(十进制)| 日期 我需要编写一个 SELECT 语句,该语句将根据“revisit”字段的值对多列进行 ORDER BY。 ORDER BY 'revisit' DESC - 此字段值为 1 的记录将在前,0 将在后如果 'revisit' = 1 按 FL、FR、RL 和 RR 中存在的最低值排序。 因此,如果记录 1 在这些字段中具有值 4.6、4.6、3.0、5.0,并且记录 2 具有值 4.0、3.1、3.9 和 2.8,那么将首先返回记录 2,因为它在这四列中拥有最低值。 如果 'revisit' = 0,则按日期排序 - 最早的日期将排在第一位。 到目前为止,我只有 'revisit' 正确排序,如果 'revisit' = 0,则按日期排序,但当 'revisit' = 1 时按四列同时排序。 SELECT * FROM vehicle ORDER BY `revisit` DESC, CASE WHEN `revisit` = 1 THEN `FL` + `FR` + `RR` + `RL` END ASC, CASE WHEN `revisit` = 0 THEN `date` END ASC 相反,它似乎是按四列的总和排序

2021-09-20 19:23:44    分类:技术分享    mysql   sql   sql-order-by

休眠。 PSQLException: 类型 int 的错误值:admin(Hibernate. PSQLException: bad value for type int : admin)

问题 好吧,我有一个带有 JAVA 和 Hibernate 4.3.1的桌面应用程序。 现在我只有两个实体(用户和角色)。 用户 ... @ManyToOne(fetch = FetchType.LAZY) @Fetch(FetchMode.JOIN) @JoinColumn(nullable = false, name = "fk_role") private Role fk_role; ... 角色 ... @Column(name = "admin", nullable = false) @Type(type = "org.hibernate.type.BooleanType") private boolean admin = false; ... 我已经尝试过了 @Type(type = "org.hibernate.type.BooleanType") 这。 @Type(type = "org.hibernate.type.NumericBooleanType") 和 @Type(type = "org.hibernate.type.YesNoType") 和 @Type(type = "org.hibernate.type.TrueFalseType") 如图所示:http://docs.jboss.org/hibernate/core/3.6/reference/en

2021-09-20 18:46:27    分类:技术分享    java   sql   database   hibernate   postgresql

sql server 使用 pyodbc 返回值(sql server return value with pyodbc)

问题 我正在尝试使用pyodbc运行一些存储过程并使用以下代码获取单个返回值: conn = pyodbc.connect("driver={SQL Server};server=MyServer;database=MyDB;trusted_connection=true") cursor = conn.cursor() SQL_command = """ DECLARE @ret INT EXEC @ret = [dbo].proc_mySP @group= 0 , @description =? SELECT @ret """ cursor.execute(SQL_command, description) retValue = cursor.fetchall() 而存储过程的框架如下: -- SOME CODE -- ...... -- EXEC another_sp -- DECLARE @RET INT -- SELECT @RET as retValue -- ...... 上面的 sql 在 sql server 中运行良好,但是,当它被上面的 Python 代码调用时,它给出了错误消息: pyodbc.ProgrammingError: ('24000', '[24000] [Microsoft][ODBC SQL Server Driver]无效的游标状态 (0)

2021-09-20 18:36:20    分类:技术分享    python   sql   return-value   pyodbc

UNION ALL 两个具有不同列类型的 SELECT - 预期行为?(UNION ALL two SELECTs with different column types - expected behaviour?)

问题 当我们对具有不同数据类型的两个表执行UNION时,由于 SQL Standard 的预期行为是什么: create table "tab1" ("c1" varchar(max)); create table "tab2" ("c3" integer); insert into tab1 values(N'asd'), (N'qweqwe'); insert into tab2 values(123), (345); select c_newname as myname from ( select "c1" as c_newname from "tab1" union all select "c3" from "tab2" ) as T_UNI; MS SQL Server提供 将 varchar 值“asd”转换为数据类型 int 时转换失败。 但是标准中定义了什么? 回答1 如果要使用union all ,每个查询中的union all列都需要具有相同的类型。 C3必须转换为 varchar,因为c1是 varchar。 尝试以下解决方案 create table "tab1" ("c1" varchar(max)); create table "tab2" ("c3" integer); insert into tab1 values(N'asd'), (N

2021-09-20 17:59:13    分类:技术分享    sql   sql-server   tsql   standards   union-all

如果参数是'NOT PASSED' postgresql 如何避免'where'子句中的列(how to avoid column in 'where' clause if parameter is 'NOT PASSED' postgresql)

问题 运行查询: select * from employee where name = $1 and age = $2 and salary = $3; 问题查询: select * from employee where name = $1 and age = $2; 我怎样才能写出一个/* 如果 $3 被通过然后( and salary = $3 )*/ 注意: /* 我无法检查null或Empty作为$3未通过,则$3将不可用于检查* / 在节点中我像这样使用 postGresAdaptor.executeQueryWithParameters(QUERY, QUERYPARAMS, function(error, result) { if (error) { callback(error); } else { data = result.data; } }); 不想在节点代码中添加逻辑,因为途中会有很多查询。 回答1 不是很清楚你的意思是 pass ,但也许你的意思是$3是一个可选参数,没有$3意思是:不在乎? SELECT * FROM employee WHERE name = $1 AND age = $2 AND ( $3 IS NULL OR salary = $3) ; 一些数据: CREATE TABLE employee ( name varchar

2021-09-20 17:50:32    分类:技术分享    sql   node.js   postgresql   where-clause

在 T-SQL 中使用任意数量的参数(Using an arbitrary number of parameters in T-SQL)

问题 是否可以创建一个带任意数量参数的参数化 SQL 语句? 我试图允许用户根据多个关键字过滤列表,每个关键字用分号分隔。 因此,输入将类似于“奥克兰;城市;规划”,而 WHERE 子句将出现与以下内容等效的内容: WHERE ProjectName LIKE '%Oakland%' AND ProjectName Like '%City%' AND ProjectName Like '%Planning%' 用串联创建这样的列表真的很容易,但由于 SQL 注入漏洞,我不想采用这种方法。 我有哪些选择? 我是否创建了一堆参数并希望用户永远不要尝试使用我定义的更多参数? 或者有没有办法安全地动态创建参数化 SQL? 性能不是什么大问题,因为该表现在只有大约 900 行,并且不会快速增长,每年可能增长 50 到 100 行。 回答1 一个基本的概念验证......实际代码会更少,但由于我不知道你的表/字段名称,这是完整的代码,所以任何人都可以验证它的工作原理,调整它等。 --Search Parameters DECLARE @SearchString VARCHAR(MAX) SET @SearchString='Oakland;City;Planning' --Using your example search DECLARE @Delim CHAR(1) SET @Delim='

2021-09-20 17:35:22    分类:技术分享    sql   sql-server   tsql

Rails 4 JOIN GROUP BY 和 SELECT(Rails 4 JOIN GROUP BY and SELECT)

问题 我正在尝试在 Rails 4 中加入 2 个表,以执行计数并保留连接表的一列。 模型:用户 has_many :orders 我想要的是:订单数量和最后一个订单的日期。 has_many :orders, -> { select("users.*, count(orders.id) as orders_count").group('users.id') } 我想像这样选择 ORDERS 表中的 created_at 列 select("users.*, orders.created_at, count(orders.id) as orders_count").group('users.id') 但在那种情况下,我得到一个错误 PG::GroupingError: ERROR: column "orders.created_at" must appear in the GROUP BY clause or be used in an aggregate function 我需要 FIRST created_at 所以我在 created_at 列上尝试了 SQL 聚合函数“FIRST” select("users.*, first(orders.created_at) as most_recent, count(orders.id) as orders_count")

2021-09-20 16:55:29    分类:技术分享    sql   ruby-on-rails   join

有没有一种方法可以轻松地将平面 DataTable 转换为嵌套的 .NET 对象?(Is there a way to easily convert a flat DataTable to a nested .NET object?)

问题 我有一个大型手动调整的 SQL 查询,它返回一个包含许多(> 25)列的平面数据表。 目前,我手动将其转换为具有三级嵌套的 .NET 对象(即包含(在其他属性中)包含(在其他属性中)更多对象列表的其他对象列表的对象。 有没有像 AutoMapper 这样的东西可以轻松地将 DataTable 转换为目标 .NET 对象,即使它是嵌套的? 回答1 我是这个问题的原发帖者。 事实证明,我问错了问题:我应该问如何轻松执行映射到复杂 POCO 排列的快速查询。 我已经发布了非常适合我的解决方案,请参阅如何在 Dapper.Net 中编写一对多查询? 以及引用 Dapper + Slapper.Automapper 的答案。

2021-09-20 16:55:24    分类:技术分享    c#   sql   sql-server-2012

Oracle SQL 交叉表查询(Oracle SQL Cross Tab Query)

问题 我有一个表,它具有以下结构和示例数据: ITEM LOC STOCK 0001 KS5 10 0001 KS6 30 0002 KS5 10 0002 KS6 20 我需要查询交叉表,以便我得到 ITEM KS5 KS6 0001 10 30 0002 10 20 LOC(KS5 和 KS6)可能会有所不同,并且可以添加新的位置。 我怎样才能得到想要的结果? 回答1 对于动态生成的结果,您需要一些动态 PLSQL 解决方案,类似于创建视图v_list_loc过程: create or replace procedure p_list_loc is v_sql varchar2(32000) := ''; begin for c in (select distinct loc from test order by loc) loop v_sql := v_sql || '''' ||c.loc|| ''' '||c.loc||','; end loop; v_sql := 'create or replace view v_list_loc as ' ||'select * from (select item, loc, stock from test) pivot (sum(stock) ' ||'for (loc) in ('||rtrim(v_sql, ',')||'))

2021-09-20 16:38:15    分类:技术分享    sql   oracle   oracle11g   report   crosstab

SQL从BEGIN中获取数据; ……; 结尾; 在 python 中阻止(SQL get data out of BEGIN; …; END; block in python)

问题 我想通过将它们放在BEGIN;之间来一次运行许多选择查询BEGIN; END; . 我尝试了以下方法: cur = connection.cursor() cur.execute(""" BEGIN; SELECT ...; END;""") res = cur.fetchall() 但是,我收到错误: psycopg2.ProgrammingError: no results to fetch 我怎样才能真正以这种方式获取数据? 同样,如果我连续有很多选择,我只会从最新的选择中获取数据。 有没有办法从所有这些中获取数据? 回答1 Postgresql 实际上不支持从单个命令返回多个结果集。 如果将此输入传递给 psql: BEGIN; SELECT ...; END; 它将在客户端拆分并实际执行三个语句,其中只有第二个返回结果集。 “BEGIN”和“END”是用于启动/完成事务的 SQL 级命令。 (可能有一个较低级别的协议来执行此操作,但我不记得了)。 您可能不想直接发出它们,而是让您的驱动程序 (psycopg2) 处理此问题。 例如,使用 Perl 的 DBI,我在连接时指定 AutoCommit=>0,它在我的第一个命令之前隐式发出“BEGIN”; 然后当我显式调用 $dbh->commit; 时“END”(或“COMMIT”等); 我猜 Python 的 DB

2021-09-20 16:23:09    分类:技术分享    python   sql   postgresql   sqlobject