我有这些结果:
PersonID SUM(PA.Total)
-------------------------
1 75
2 75
3 15
4 15
5 60
6 60
Run Code Online (Sandbox Code Playgroud)
用表如:
PersonID Total
------------------
1 50
2 50
3 10
4 10
5 40
6 40
1 25
2 25
3 5
4 5
5 20
6 20
Run Code Online (Sandbox Code Playgroud)
这些按人分组.现在我想添加一个列,其中每个人的百分比是根据他们所有总和的总和来计算的.
例如:总和是300,因此我需要这样的结果:
PersonID SUM(PA.Total) Percentage
--------------------------------------
1 75 25%
2 75 25%
3 15 5%
4 15 5%
5 60 20%
6 60 20%
Run Code Online (Sandbox Code Playgroud)
我已经在线查看了代码,我提出了一个像这样的修复程序:
SELECT
P.PersonID, SUM(PA.Total)
SUM(PA.Total) * 100 / [p] AS 'Percentage'
FROM …Run Code Online (Sandbox Code Playgroud) 我正在尝试将行从一个表批量插入到另一个表。
DECLARE @batch INT = 10000;
WHILE @batch > 0
BEGIN
BEGIN TRANSACTION
INSERT into table2
select top (@batch) *
FROM table1
SET @batch = @@ROWCOUNT
COMMIT TRANSACTION
END
Run Code Online (Sandbox Code Playgroud)
它在前 10,000 个上运行并插入它们。然后我收到错误消息“无法插入重复的键”,它试图插入相同的主键,所以我假设它试图重复同一批次。我在这里缺少什么逻辑来循环批次?可能很简单,但我无法弄清楚。
有人可以帮忙吗?谢谢
我正在寻找有关使用别名而不是原始数据加入的最佳方式的建议.例如,数据在加入之前被修改.
一个例子:
CREATE TABLE Table1 (
No1 varchar(10)
);
CREATE TABLE Table2 (
No1 varchar(10)
);
INSERT INTO Table1 (No1)
VALUES ('222');
INSERT INTO Table2 (No1)
VALUES ('111');
Run Code Online (Sandbox Code Playgroud)
如果我使用case语句创建了一个连接,但我想加入case语句的别名,这不适用于通常的连接语法,例如
SELECT
CASE WHEN T1.[No1] = '222' THEN '111' ELSE T1.[No1] END AS [T1 No],
T2.[No1] AS [T2 No]
FROM Table1 T1
FULL JOIN Table2 T2
ON T1.[No1] = T2.[No1]
Run Code Online (Sandbox Code Playgroud)
这给出了结果:
| T1 No | T2 No |
|--------+--------|
| 111 | (null) |
| (null) | 111 |
Run Code Online (Sandbox Code Playgroud)
http://www.sqlfiddle.com/#!18/203e8/1
但是,我加入别名的方法是:
SELECT …Run Code Online (Sandbox Code Playgroud) 在SQL Server 2014中,master数据库包含一个名为sp_rename的系统存储过程.我很想知道它是如何工作的,所以我一直在看它.
在第190行,有一个包含两个百分号的EXEC语句:
EXEC %%ScalarType(MultiName = @SchemaAndTypeName).LockMatchID(ID =
@xusertype, Exclusive = 1)
Run Code Online (Sandbox Code Playgroud)
%%是什么意思?我在网上搜索过,但没有找到任何甚至远程提到它的东西.
我正在尝试创建一个总计列,以将前面各列的值相加。但是,如果有NA,我将遇到困难。如果该行中没有NA,则我的脚本将不会计算总和。
我如何编辑以下脚本以将NA实质上计数为0,或者完全忽略它们,但仍计算总和。我实际上不想将NA更改为0。
CTDB %>% mutate(SCARED_TOTAL_CHILD = CTDB %>% rowwise() %>%
SELECT(SCARED_BREATHE_CHILD:SCARED_SHY_CHILD) %>% rowSums()) -> CTDB
Run Code Online (Sandbox Code Playgroud)
谢谢!!
示例:http://sqlfiddle.com/#!18 / 7f3df / 2
CREATE TABLE Table1 (
Reg uniqueidentifier
);
INSERT INTO Table1 (Reg)
Values
('DF215E10-8BD4-4401-B2DC-99BB03135F2E'),
('93015E10-8BD4-4401-B2DC-99BB03135F2E'),
('21215E10-8BD4-4401-B2DC-99BB03135F2E');
Run Code Online (Sandbox Code Playgroud)
查询:
select * from Table1
WHERE left(CAST(Reg AS CHAR(36)),1) > 8
Run Code Online (Sandbox Code Playgroud)
我需要创建一个查询,以查找所有以8或更高数字开头或以字母开头的结果,但我遇到了转换错误,但找不到解决方法。该列是唯一标识符。如何将其转换为可以过滤的内容?
谁能提供一些解决方案的建议?
谢谢
我有两个 postgres 表:
worker_details_verification (verification_id BIGSERIAL, worker_id BIGINT,
state TEXT, proofs TEXT[])
worker_details(worker_id BIGINT, name TEXT)
Run Code Online (Sandbox Code Playgroud)
现在我想得到
`verification_id, worker_id, proofs FROM` the table
`worker_details_verification`
Run Code Online (Sandbox Code Playgroud)
限制记录 `WHERE state = 'Initial'
现在除了上述三列之外,我worker_details还想要表中的名称列,其中worker_id可用于查询工人的姓名。
我尝试了以下查询,但没有成功。
SELECT a.verification_id, a.worker_id, a.state, a.proofs, b.Name FROM
worker_details_verification a FULL OUTER JOIN worker_details b ON
a.worker_id = b.worker_id AND a.state = 'Initial';
Run Code Online (Sandbox Code Playgroud)
它返回甚至 a.state 都不是的记录'Initial',并且还返回一些错误的记录,其中所有namefrom都与for列worker_detail一起返回。NULLworker_details_verification
我目前有Table1包括
ID Gender
1 m
2 f
3 f
4 m
5 f
6 f
Run Code Online (Sandbox Code Playgroud)
现在我希望将这些数据插入第二个表(表2).但基本上我试图插入"男性"和"女性"这两个词.因此,例如当表1中的Gender ='m'时,我想将char'男性'插入到第二个表(table2)中,并将其插入到女性中.
我创建了一些代码,如
UPDATE Table2
SET
Gender =
( CASE WHEN Table1.Gender = 'm' THEN 'Male'
WHEN Table1.Gender = 'f' THEN 'Female'
ELSE 'N/a'
END)
Run Code Online (Sandbox Code Playgroud)
如果有任何帮助,我有一个SQL Fiddle架构 -
http://sqlfiddle.com/#!9/8a3080
谢谢
我有一个sql server结果,按人分组.而SUMS是他们的日常数字和月度数字.
Person Team Daily Figure Month To Date
Tony Team 1 53 635
Dan Team 2 47 172
Tom Team 3 17 232
Simon Team 2 16 655
Ben Team 3 17 232
Fred Team 2 16 655
Run Code Online (Sandbox Code Playgroud)
我如何仅仅通过团队2对这些结果进行分组?例如,我仍然希望其他个人结果显示,但我希望只将团队2组合在一起.
示例结果
Person Team Daily Figure Month To Date
Tony Team 1 53 635
Tom Team 3 17 232
Ben Team 3 17 232
Team 2 Team 2 79 1482
Run Code Online (Sandbox Code Playgroud)
谢谢更新:
SELECT
Person = case when Team = 'Team 2'
then …Run Code Online (Sandbox Code Playgroud) 我正在处理一个巨大的列列表(大约50个),我只需要按一列分组.无论如何在SQL Server中我可以通过诸如之类的东西来聚合列
SELECT MAX(*)
FROM View1
GROUP BY Column1
Run Code Online (Sandbox Code Playgroud)
而不是必须通过每一个并指定一个聚合函数.我在网上看过,但找不到任何东西.是否有人可以给我任何建议或指导,或者仅仅是经历每一行的情况?
谢谢
sql ×9
sql-server ×8
insert ×2
join ×2
alias ×1
case ×1
group-by ×1
na ×1
percentage ×1
postgresql ×1
r ×1
rowsum ×1
sql-update ×1
sum ×1