我有一个查询,我通过重写工作-它有一个巨大的一堆case文中陈述select列表中的所有基本是这样的:
select
Column1 =
case when (Something = 2) and (SomethingElse is null) and (AnotherThing in (1, 2))
then 1
else 0
end,
Column2 =
case when (Something = 3) and (SomethingElse is not null) and (AnotherThing in (2, 3))
then 1
else 0
end,
...
Run Code Online (Sandbox Code Playgroud)
特别注意when <expressions> then 1 else 0所有这些通用的“ ”逻辑。
它看起来真的很臃肿和冗长,是对case语句的粗暴使用- 我的编程大脑告诉我这可以通过一些基本的二进制&逻辑更简洁地实现,case完全删除:
select
Column1 = (Something = 2) & (SomethingElse is null) & …Run Code Online (Sandbox Code Playgroud) 我有一个包含 ~35k IDs ( TableC) 的表,一个包含多列 ( TableA) 的ID表,其中包括前面提到的表和第三个空表,具有与第二个表 ( TableB)相同的列。
现在,我需要每个条目从复制TableA到TableB其中ID的TableA是TableC。我想出了这个查询:
SELECT * INTO TableB
FROM TableA
WHERE ID IN
(SELECT ID FROM TableC)
Run Code Online (Sandbox Code Playgroud)
但这会导致错误There is already an object named 'TableB' in the database... 我不允许为此删除和重新创建TableB。
使用 Microsoft SQL Server Enterprise Edition v9.00.3042.00,即 SQL Server 2005 Service Pack 2
我怎么能每个条目将复制TableA到TableB其中ID的TableA是TableC?
我想删除与一组特定数据库相关的所有作业。
因此,我已将所有名称添加到表变量中,并尝试生成脚本以删除作业。
我怎样才能做到这一点?
use msdb
go
DECLARE @R TABLE ( NAME VARCHAR(108) NOT NULL PRIMARY KEY CLUSTERED)
INSERT INTO @R(NAME)
SELECT
'UK15SUMMProduct' UNION ALL SELECT
'US15SUMMProduct' UNION ALL SELECT
'DE15SUMMProduct' UNION ALL SELECT
'AT15SUMMProduct' UNION ALL SELECT
'FR15SUMMProduct' UNION ALL SELECT
'EU15SUMMProduct' UNION ALL SELECT
'AU15SUMMProduct' UNION ALL SELECT
'UK15SUMSProduct' UNION ALL SELECT
'US15SUMSProduct' UNION ALL SELECT
'DE15SUMSProduct' UNION ALL SELECT
'AT15SUMSProduct' UNION ALL SELECT
'FR15SUMSProduct' UNION ALL SELECT
'EU15SUMSProduct' UNION ALL SELECT
'AU15SUMSProduct'
SELECT S.*
FROM SYSJOBS S
WHERE …Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2008-r2 select sql-server-2012 sql-server-2014
我有一张包含付款信息的表格,如下所示:
ID COSTUMER_ID DATEPAID AMOUNT
1 1 2012-01-01 50
2 1 2012-02-01 100
3 1 2012-03-01 70
4 2 2012-03-01 6000
4 2 2012-09-01 3000
4 2 2014-04-01 8000
5 3 2013-03-01 9000
6 3 2013-08-01 3000
Run Code Online (Sandbox Code Playgroud)
等等。我需要知道哪些客户在 12 个月内支付了超过 10,000 美元。(在示例中,只有客户 3 适合)。不要介意什么时候,唯一的标准是在任何连续 12 个月的组合中 SUM(AMOUNT) > 10000。
但我坚持下去。有任何想法吗?我正在使用 SQL Server 2012。
我有以下数据库表
Firstname Varchar(40)
Surname Varchar(40)
Department Binary
JobCode Char(1)
Run Code Online (Sandbox Code Playgroud)
通常情况下,提取特定部门的记录是没有问题的。部门字段是一个由 7 部分组成的字段,每一位代表一个特定的部门,允许系统轻松显示人们在一个或多个部门工作的位置。假设 John Smith 的工作代码为 K,而 Freda Williams 的工作代码为 M。
同样,返回特定部门的记录非常简单。但是,如果 John Smith 临时晋升到同一部门,而不是更改记录,则会添加一个带有职位代码 F的额外记录。本质上,职位代码字母越低,等级越高。
因此,如果我们要检索 John Smith 的当前详细信息,很简单,选择姓名为 John Smith 的记录,按 Job Code Asc, Limit (1) 排序。
但是,提取一个部门的所有记录的 SQL 语句是什么,但要确保John Smith只出现一个记录,而且它是“F”记录?任何人都可以帮忙吗?我原以为子查询可能会对它进行排序,但不知道如何排序。
这可能非常基本,但我一直在努力弄清楚。我环顾四周,但找不到任何类似的问题。我正在使用 SQL Server 2008 R2
我有一个观点:
ID | VALUE
1 | 151;181;179;185;160;187
2 | 185;160
3 | 151;181;179;185;150
4 | 185;160;187
5 | 187
Run Code Online (Sandbox Code Playgroud)
我想要一个选择语句来产生这个结果:
ID | VALUE
1 | 1043
2 | 345
3 | 846
4 | 532
5 | 187
Run Code Online (Sandbox Code Playgroud) 我们有两个表:
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` int(10) unsigned DEFAULT '0',
`user_id` int(11) DEFAULT '0',
....
`subject_id` int(11) unsigned DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `user_id` (`user_id`),
KEY `created` (`created`),
KEY `text_id` (`text_id`) USING BTREE,
KEY `subject_id` (`subject_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=237542180 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
Run Code Online (Sandbox Code Playgroud)
第二个:
CREATE TABLE `users` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`email` char(150) DEFAULT NULL,
`reg_time` int(10) unsigned DEFAULT '0',
`password` char(255) DEFAULT NULL,
...................
`moderation` int(1) …Run Code Online (Sandbox Code Playgroud) 我正在尝试修改从一组客户中提取最新订单并提供 order_type 的现有查询。
当前查询工作正常(虽然有点慢,但下面的所有列都已编入索引):
SELECT
DISTINCT(td1.product_id),
td1.customer_id,
td1.date_test_added,
tdmi.product_type_id
FROM
order_history AS td1
LEFT JOIN order_history td2
ON td1.customer_id = td2.customer_id AND td1.date_test_added < td2.date_test_added
LEFT JOIN order_types tdmi
ON tdmi.product_id = td1.product_id
WHERE
td2.date_test_added IS NULL
AND tdmi.product_type_id = 31
AND td1.customer_id IN (91000, 91001, 91002, 91003)
Run Code Online (Sandbox Code Playgroud)
如果我将第一个连接中的小于运算符更改为大于,则不会返回任何结果。
更改此设置以提取最早订单(基于 date_test_ added)的最佳方法是什么?
我有2张桌子。首先"product" (id)。第二- "product_has_option_value" (product_id, option_value_id)。
我怎样才能获得id没有一些的产品option_value_id(例如 10)?“product_has_option_value”具有多对多关系。
好的。我想我找到了解决方案:
select p.id
from product p
where p.id not in
(select distinct(product_id)
from product_has_option_value
where option_value_id=543)
Run Code Online (Sandbox Code Playgroud) I have 2 identical DBs, one of the tables has C1, C2, C3 , composite key. I'm trying to get the rows from B that are not present in DB A.
I have tried many approaches, but at this time I even can't re-use this suggestion due too the late hour.
I think it should be by something like
Select * from B
where not exists
(SELECT a.C1, a.C2, a.C3
from A.table as a, b.table as b
where a.C1=b.C1
, …Run Code Online (Sandbox Code Playgroud)