我在某些运算符优先级问题上遇到了一些困难,我希望下面的所有查询都失败; 这是基于下面的文档,其中将在比较运算符之前评估除法.
用于t-sql运算符优先级的Microsoft文档:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/operator-precedence-transact-sql? view = sql-server-2017
示例数据和查询
CREATE TABLE #orders(
price INT
)
GO
INSERT INTO #orders VALUES
(1)
,(2)
,(3)
,(4)
,(5)
,(6)
,(7)
,(8)
,(9)
,(10)
,(0)
GO
/*
the following two queries work
*/
SELECT *
FROM #orders
WHERE 2 / price > 0
AND price > 0;
SELECT *
FROM #orders
WHERE price > 0
AND 2 / price > 0;
/*
these don't work - getting divide by zero error …
Run Code Online (Sandbox Code Playgroud) 为标题道歉,但我正试图在我的水平之上做一些事情甚至让我解释它.
假设我有一个包含变量person,foodstuff和amount的表:
Person food Amount
Mike Butter 3
Mike Milk 4
Mike Chicken 2
Tim Milk 4
John Chicken 2
Run Code Online (Sandbox Code Playgroud)
通过在查询中将表连接到自身,我已设法创建一个列表,其中食物是新变量的基础,值是金额.上表将成为:
Person Butter Milk Chicken
Mike 3 4 2
Run Code Online (Sandbox Code Playgroud)
代码大约是:
Select
a.person,
b.amount as Butter,
c.amount as Milk,
d.amount as Chicken
from PersonFoodAmount a
inner join PersonFoodAmount b on a.person = b.person
inner join PersonFoodAmount c on a.person=c.person
where b.food='Butter'
and c.food='Milk'
and d.food='Chicken'
Run Code Online (Sandbox Code Playgroud)
现在,这给了迈克,因为他检查了所有的盒子.但我还需要部分匹配:
Person Butter Milk Chicken
Mike 3 4 2
Tim NULL 4 NULL
John NULL Null …
Run Code Online (Sandbox Code Playgroud) 我有一个SQL服务器表,我试图获取一个计算列 - MyPartition - 指示基于变量@segment的分区数.例如,如果@segment = 3,则以下输出为真.
RowID | RowName | MyPartition
------ | -----------| -------
1 | My Prod 1 | 1
2 | My Prod 2 | 1
3 | My Prod 3 | 1
4 | My Prod 4 | 2
5 | My Prod 5 | 2
6 | My Prod 6 | 2
7 | My Prod 7 | 3
8 | My Prod 8 | 3
9 | My Prod 9 | 3
10 …
Run Code Online (Sandbox Code Playgroud) 我试图获得每半小时间隔的呼叫计数。想不通。
select
count(call_id) as '#Calls',
1/2 h(date_time) as 'Call_Interval'
from My_Table
Run Code Online (Sandbox Code Playgroud)
我有一个表有两列贷款no和counter_value.
针对每笔贷款,不存储以逗号分隔的值列表.
declare @tbl table (loanno varchar(100) , counter_value varchar(200) )
insert into @tbl
values(‘pr0021’,‘1000,200,300,100,800,230’),
(‘pr0021’,‘500,300,300,100,600,200’),
(‘pr0021’,‘500,100,200,190,400,100’)
Run Code Online (Sandbox Code Playgroud)
我需要根据贷款号和现场汇总(总和)对柜台价值进行分组.我需要输出如下.
loanno counter_value
pr0021 2000,600,800,390,1800,530
Run Code Online (Sandbox Code Playgroud) 我有以下查询:
SELECT
cst_recno as [Member ID],
cmc_end_date as 'Last Term End date as a Trustee',
ind_first_name as 'Last Name',
ind_mid_name as 'First Name',
ind_last_name as 'Last Name',
cst_ixo_title_dn as 'title',
cst_org_name_dn as 'organization',
adr_country as 'Country',
adr_city as 'City',
adr_state as 'State',
cst_eml_address_dn as 'Email'
FROM mb_committee_x_customer
JOIN co_customer ON cst_key=cmc_cst_key
JOIN mb_committee ON cmt_key=cmc_cmt_key
JOIN co_individual ON ind_cst_key=cmc_cst_key
LEFT JOIN co_customer_x_address ON cmc_cxa_key=cxa_key
LEFT JOIN co_address ON cxa_adr_key = adr_key
WHERE cmc_end_date <= '9/6/2017'
AND ind_deceased_flag != 1
AND …
Run Code Online (Sandbox Code Playgroud)