小编Eli*_*Eli的帖子

看似不正确的运营商优先权

我在某些运算符优先级问题上遇到了一些困难,我希望下面的所有查询都失败; 这是基于下面的文档,其中将在比较运算符之前评估除法.

用于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)

sql-server

7
推荐指数
1
解决办法
148
查看次数

SQL Server - 尝试对我的表进行反规范化

为标题道歉,但我正试图在我的水平之上做一些事情甚至让我解释它.

假设我有一个包含变量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 sql-server join

5
推荐指数
2
解决办法
96
查看次数

TSql返回基于分区和rownumber的列

我有一个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)

t-sql sql-server row-number rank partition-by

4
推荐指数
1
解决办法
44
查看次数

按半小时间隔计算呼叫

我试图获得每半小时间隔的呼叫计数。想不通。

select 
       count(call_id) as '#Calls',
       1/2 h(date_time) as 'Call_Interval'
from My_Table
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

sql sql-server

3
推荐指数
1
解决办法
453
查看次数

逗号分隔值的聚合就位

我有一个表有两列贷款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)

sql t-sql sql-server sql-server-2012

3
推荐指数
1
解决办法
73
查看次数

带有where子句的M​​AX Date

我有以下查询:

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)

sql sql-server sql-server-2012

1
推荐指数
1
解决办法
1049
查看次数