小编Yog*_*rma的帖子

从sql查询中的两列中减去值

有两列,我想减去它们。我正在尝试对 [付款] 列求和,然后从 [total_bill] 列中减去它。下面是我的代码,它给我错误,它无法对包含聚合或子查询的表达式执行聚合函数。

SELECT SUM((bill_record.total_bill)-SUM(invoice_payments.payment)) AS [LEFT AMOUNT] 
Run Code Online (Sandbox Code Playgroud)

sql sql-server

9
推荐指数
1
解决办法
11万
查看次数

是否有可能将Group by,Having和Sum结合起来?

我有一张桌子:

------------------------
|id|p_id|desired|earned|
------------------------
|1 | 1  |  5    |  7   |
|2 | 1  |  15   |  0   |
|3 | 1  |  10   |  0   |
|4 | 2  |  2    |  3   |
|5 | 2  |  2    |  3   |
|6 | 2  |  2    |  3   |
------------------------
Run Code Online (Sandbox Code Playgroud)

我需要进行一些计算,并尝试在一个非常复杂的请求中进行计算,否则我知道如何使用请求数来计算它.我需要结果表如下:

---------------------------------------------------------
|p_id|total_earned|    AVG   |      Count     |  SUM    |
|    |            | (desired)|(if earned != 0)|(desired)|
---------------------------------------------------------
|  1 |      7     |     10   |       1        |    30 …
Run Code Online (Sandbox Code Playgroud)

sql group-by having

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

使用分组累积先前的行

我在MS SQL Server上有这个表

Customer    Month    Amount
-----------------------------
Tom         1        10
Kate        1        60
Ali         1        70
Tom         2        50
Kate        2        40
Tom         3        80
Ali         3        20
Run Code Online (Sandbox Code Playgroud)

我希望select能够每个月积累客户

Customer    Month    Amount
-----------------------------
Tom         1        10
Kate        1        60
Ali         1        70
Tom         2        60
Kate        2        100
Ali         2        70
Tom         3        140
Kate        3        100
Ali         3        90
Run Code Online (Sandbox Code Playgroud)

注意到Ali没有2个月的数据,Kate没有3个月的数据

我已经做到了,但问题是,对于每个客户的缺失月份没有数据显示,Kate必须在第3个月有100个金额,而Ali必须在第2个月有70个金额

declare @myTable as TABLE   (Customer varchar(50), Month int, Amount int)
;

INSERT INTO @myTable
    (Customer, Month, Amount)
VALUES …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

SQL 分区按日期范围

假设这是我的表:

ID  NUMBER  DATE
------------------------
1   45      2018-01-01
2   45      2018-01-02
2   45      2018-01-27
Run Code Online (Sandbox Code Playgroud)

我需要使用 partition by 和 row_number 分开,其中一个日期和另一个日期之间的差异大于 5 天。上面例子的结果是这样的:

ROWNUMBER   ID  NUMBER  DATE
-----------------------------
1           1   45      2018-01-01
2           2   45      2018-01-02
1           3   45      2018-01-27
Run Code Online (Sandbox Code Playgroud)

我的实际查询是这样的:

SELECT ROW_NUMBER() OVER(PARTITION BY NUMBER ODER BY ID DESC) AS ROWNUMBER, ...

但正如您所注意到的,它不适用于日期。我怎样才能做到这一点?

sql t-sql sql-server

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

UDF中的COLLATE无法按预期工作

我有一个带有文本字段的表.我想选择文本全部大写的行.此代码按预期工作,并返回ABC:

SELECT txt
FROM (SELECT 'ABC' AS txt UNION SELECT 'cdf') t
WHERE 
txt COLLATE SQL_Latin1_General_CP1_CS_AS = UPPER(txt)
Run Code Online (Sandbox Code Playgroud)

然后我创建UDF(如此处所示):

CREATE FUNCTION [dbo].[fnsConvert]
(
      @p NVARCHAR(2000) ,
      @c NVARCHAR(2000)
)
RETURNS NVARCHAR(2000)
AS
    BEGIN
        IF ( @c = 'SQL_Latin1_General_CP1_CS_AS' )
            SET @p = @p COLLATE SQL_Latin1_General_CP1_CS_AS
        RETURN @p    
    END
Run Code Online (Sandbox Code Playgroud)

并运行如下(看起来像我的等效代码):

SELECT txt
FROM (SELECT 'ABC' AS txt UNION SELECT 'cdf') t
WHERE 
dbo.fnsConvert(txt, 'SQL_Latin1_General_CP1_CS_AS') = UPPER(txt)
Run Code Online (Sandbox Code Playgroud)

然而,这ABC也会回归cdf.

为什么会如此,我该如何让它发挥作用?

PS我在这里需要UDF才能从.Net LINQ2SQL提供程序调用区分大小写的比较.

sql t-sql sql-server collation

6
推荐指数
2
解决办法
510
查看次数

获取所提供日期之间的所有日期

我有这个表和样本数据.我希望得到整个月或特定日期的出勤率和信息,例如他工作的时间或他不在的日子.

CREATE TABLE Attendance
(
    [EmpCode] int,
    [TimeIn] datetime,
    [TimeOut] datetime
)

INSERT INTO Attendance VALUES (12, '2018-08-01 09:00:00', '2018-08-01 17:36:00');
INSERT INTO Attendance VALUES (12, '2018-08-02 09:00:00', '2018-08-02 18:10:00');
INSERT INTO Attendance VALUES (12, '2018-08-03 09:25:00', '2018-08-03 16:56:00');
INSERT INTO Attendance VALUES (12, '2018-08-04 09:13:00', '2018-08-05 18:09:00');
INSERT INTO Attendance VALUES (12, '2018-08-06 09:00:00', '2018-08-07 18:15:00');
INSERT INTO Attendance VALUES (12, '2018-08-07 09:27:00', '2018-08-08 17:36:00');
INSERT INTO Attendance VALUES (12, '2018-08-08 09:35:00', '2018-08-09 17:21:00');
INSERT INTO Attendance VALUES (12, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

SQL Server:组合列中止相同的值

我正在使用ADO连接SQL Server.我有一张桌子,我想将一些cols分组到一个col.我需要新col中的值是不同的.

这是我的需要

在此输入图像描述

谢谢大家!

sql sql-server

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

通过sql对分区进行不同计数

我有一张像这样的桌子

\n\n
col1ID  col2String Col3ID Col4String Col5Data\n  1        xxx       20      abc     14-09-2018\n  1        xxx       20      xyz     14-09-2018\n  2        xxx       30      abc     14-09-2018\n  2        xxx       30      abc     14-09-2018 \n
Run Code Online (Sandbox Code Playgroud)\n\n

我想添加列来计算 col4String 组中按 col1ID 和 col3ID 有多少个不同的字符串。

\n\n

所以像

\n\n
COUNT(DISTINCT (Col4String)) over (partition by col1ID, col3ID)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用,我收到一个错误

\n\n
\n

OVER 子句中不允许使用 DISTINCT。
\n 消息 102,级别 15,状态 1,第 23 行。

\n
\n\n

我有更多列,如 col2String、col5Data 但它们应该 \xc2\xb4t 受到影响,所以我不能在 的开头使用 unique SELECT,并且dense_rank()doen\xc2\xb4t 似乎也适用于我的情况。

\n\n

谢谢你的帮助。

\n

sql t-sql sql-server count distinct

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

在SQL Server中对SUM函数应用OR条件

我有两列名为DebitCredit.我想从一列中获取值并放入第三列,Balance.我想应用一个条件,如果Debit包含任何值,它应该放在Balance列中,如果Credit有东西,那么它应该在列中插入该值,但如果两者都有一些值,那么只有一个应该去那里,Debit或者Credit.

Debit    Credit     Balance
------------------------------
1000     NULL       1000
2200     NULL       2200
NULL     3000       3000
1500     1500       1500
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT 
       Debit, Credit, SUM(Credit|Debit) AS Balance
FROM Table
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

TSQL Pivot 4值列

在SQL Server 2008中,我尝试使用Period列将下面的表格格式"旋转"为宽格式(在实际数据中有5个不同的句点).

我已经搜索但尚未找到解决方案.我已经提到https://www.tangrainc.com/blog/2009/01/pivoting-on-multiple-columns/#comment-504但无法翻译的逻辑> 2的值列-这是我需要的.

有什么想法吗?您可能已经猜到我不是SQL专家.使用SQL Server 2008.

谢谢,克里斯

PS.第一个S/O帖子!

试图从平台上取得:

在此输入图像描述

到一张宽桌子:

在此输入图像描述

sql t-sql sql-server pivot sql-server-2008

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

标签 统计

sql ×10

sql-server ×9

t-sql ×6

collation ×1

count ×1

distinct ×1

group-by ×1

having ×1

pivot ×1

sql-server-2008 ×1