在CentOS 6上的PostgreSQL 9中,pref_users表中有60000条记录:
# \d pref_users
Table "public.pref_users"
Column | Type | Modifiers
------------+-----------------------------+--------------------
id | character varying(32) | not null
first_name | character varying(64) | not null
last_name | character varying(64) |
login | timestamp without time zone | default now()
last_ip | inet |
(... more columns skipped...)
Run Code Online (Sandbox Code Playgroud)
另一张桌子可容纳大约500名用户,不允许再玩游戏:
# \d pref_ban2
Table "public.pref_ban2"
Column | Type | Modifiers
------------+-----------------------------+---------------
id | character varying(32) | not null
first_name | character varying(64) |
last_name | character varying(64) …Run Code Online (Sandbox Code Playgroud) 我有一个表,我希望从每个ID的3个(也是3个)列中找到第一个非空值,从Col1开始,然后到Col2,再到Col3
注意:Col3永远不会为空
ID Col1 Col2 Col3
------------------------------
1 A B X
2 NULL C X
3 NULL NULL X
4 D NULL X
Run Code Online (Sandbox Code Playgroud)
要为每个值获取正确的列,请使用以下SQL Select
SELECT ID,
COALESCE(Col1, Col2, Col3) AS Col
FROM MyTable
Run Code Online (Sandbox Code Playgroud)
返回以下内容并且工作得很好
ID Col
-------------
1 A
2 C
3 X
4 D
Run Code Online (Sandbox Code Playgroud)
我想要的是返回的第三列,指示合并成功的列.以下是我希望生成的结果集:
ID Col Source
-----------------------
1 A Col1
2 C Col2
3 X Col3
4 D Col1
Run Code Online (Sandbox Code Playgroud) 我需要从几个表创建一个视图.视图中的一列必须由一个表中的多个行组成,作为带逗号分隔值的字符串.
这是我想要做的简化示例.
Customers:
CustomerId int
CustomerName VARCHAR(100)
Orders:
CustomerId int
OrderName VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
客户和订单之间存在一对多的关系.所以给出了这些数据
Customers
1 'John'
2 'Marry'
Orders
1 'New Hat'
1 'New Book'
1 'New Phone'
Run Code Online (Sandbox Code Playgroud)
我希望视图是这样的:
Name Orders
'John' New Hat, New Book, New Phone
'Marry' NULL
Run Code Online (Sandbox Code Playgroud)
因此无论他们是否有订单,每个人都会出现在表格中.
我有一个存储过程,我需要转换到这个视图,但似乎你不能声明参数并在视图中调用存储过程.有关如何将此查询添加到视图中的任何建议?
CREATE PROCEDURE getCustomerOrders(@customerId int)
AS
DECLARE @CustomerName varchar(100)
DECLARE @Orders varchar (5000)
SELECT @Orders=COALESCE(@Orders,'') + COALESCE(OrderName,'') + ','
FROM Orders WHERE CustomerId=@customerId
-- this has to be done separately in case orders returns NULL, so no customers are …Run Code Online (Sandbox Code Playgroud) 提前,我想感谢你的帮助.这是一个很棒的社区,我在这里找到了许多编程答案.
我有一个包含多列的表,其中5列包含日期或null.
我想编写一个sql查询,它基本上将5列合并为1列,条件是如果五列中的一列包含"NULL"值,则返回的值为null.基本上与返回第一个非null的合并条件相反,我想返回第一个null.如果没有为null,则返回5个日期中最大的日期将是最佳的,但是我可以决定返回5个日期中的任何一个.
C1 C2 C3 C4 C5
-- -- -- -- --
1/1/1991 1/1/1991 1/1/1991 1/1/1991 2/2/1992
NULL 1/1/1991 1/1/1991 1/1/1991 1/1/1991
Run Code Online (Sandbox Code Playgroud)
查询返回:
C1
--
2/2/1992
NULL
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
(服务器是MSSQL2008)
说我有下表:
TABLE: product
===============================================================================
| product_id | language_id | name | description |
===============================================================================
| 1 | 1 | Widget 1 | Really nice widget. Buy it now! |
-------------------------------------------------------------------------------
| 1 | 2 | Lorem 1 | |
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我如何查询它,它试图给我name和descriptionwhere language_id= 2,但language_id如果列包含NULL,则回退到= 1?
在上面的例子中,我应该得到Lorem 1的name和Really nice widget. Buy it now!为description.
我有一个项目可以使用SQL Server或MS Access作为数据存储.在一个SELECT语句中,我必须对单个列和单个值执行COALESCE操作,如下所示:
SELECT COALESCE([Amount], 0) FROM PaymentsDue;
Run Code Online (Sandbox Code Playgroud)
我想编写一个SQL语句,它将在SQL Server和MS Access中正确执行.直接感兴趣的SQL Server版本是2008,尽管可以优选跨版本的解决方案.
今天早些时候,有人能够向我展示一个SQL技巧,它允许我使用单个SELECT语句来有效地将DATETIME CAST到DATE.我不知道是否有人也有类似的伎俩来执行在可应用于方式COALESCE(如,IFNULL或NZ)操作都 SQL Server和MS访问?
我有以下namedQuery
select new test.entity.Emp(COALESCE(k.projectId,'N')
as projectId, k.projectName) from Emp o inner join o.projects k
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误
期待RIGHT_ROUND_BRACKET,找到'('
如何COALESCE在namedQuery中处理?
有没有其他方法来处理JPA中的空值?
我的同事是C#的新手,并不知道合并操作员.所以,我看到他写了一行代码:
string foo = "" + str;
Run Code Online (Sandbox Code Playgroud)
想法是,如果str为null,则此表达式将返回空字符串.当然,这可以改写为:
string foo = str ?? "";
Run Code Online (Sandbox Code Playgroud)
我觉得这会更具可读性.但这真的很重要吗?可读性的好处是否足以建议返回并使这些线看起来像第二个?或者这是我应该学会放手的事情之一(假设我的同事接受了未来最佳方式的教育)?
编辑:只是一个注释,我很欣赏效率评论,但这并没有真正用于任何性能至关重要的情况.因此,虽然这些信息很有趣,但并不一定是我认为重要的信息.
我正在使用Twig PHP模板引擎.
是否有可用的运算符输出第一个非空值(合并)?
例如(使用PHP伪代码):
{{ title ?: "Default Title" }}
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做,但有点啰嗦:
{% if title %}{{ title }}{% else %}{{ "Default Title" }}{% endif %}
Run Code Online (Sandbox Code Playgroud) 如何将coalesce一null列转换为空JSONB数组?这不起作用:
SELECT jsonb_array_elements(coalesce(null_column, '{}'::jsonb))
FROM table
WHERE id = 13;
-- ERROR: cannot extract elements from an object
Run Code Online (Sandbox Code Playgroud)
既不是这个:
SELECT jsonb_array_elements(coalesce(null_column, '[]'::jsonb))
FROM table
WHERE id = 13;
-- ERROR: cannot extract elements from a scalar
Run Code Online (Sandbox Code Playgroud)