有两列,我想减去它们。我正在尝试对 [付款] 列求和,然后从 [total_bill] 列中减去它。下面是我的代码,它给我错误,它无法对包含聚合或子查询的表达式执行聚合函数。
SELECT SUM((bill_record.total_bill)-SUM(invoice_payments.payment)) AS [LEFT AMOUNT]
Run Code Online (Sandbox Code Playgroud) 我有一张桌子:
------------------------
|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) 我在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) 假设这是我的表:
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, ...
但正如您所注意到的,它不适用于日期。我怎样才能做到这一点?
我有一个带有文本字段的表.我想选择文本全部大写的行.此代码按预期工作,并返回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提供程序调用区分大小写的比较.
我有这个表和样本数据.我希望得到整个月或特定日期的出勤率和信息,例如他工作的时间或他不在的日子.
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) 我有一张像这样的桌子
\n\ncol1ID 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\nCOUNT(DISTINCT (Col4String)) over (partition by col1ID, col3ID)\n
Run Code Online (Sandbox Code Playgroud)\n\n但它不起作用,我收到一个错误
\n\n\n\n\nOVER 子句中不允许使用 DISTINCT。
\n
\n 消息 102,级别 15,状态 1,第 23 行。
我有更多列,如 col2String、col5Data 但它们应该 \xc2\xb4t 受到影响,所以我不能在 的开头使用 unique SELECT
,并且dense_rank()
doen\xc2\xb4t 似乎也适用于我的情况。
谢谢你的帮助。
\n我有两列名为Debit
和Credit
.我想从一列中获取值并放入第三列,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 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帖子!
试图从平台上取得:
到一张宽桌子: