我有一个查询,其中链接了两列。为什么别名不能在工作中的GROUP BY条款,但ORDER BY条款,它的工作?如何正确编写选择?
SELECT
KOS_VER_ID AS "Vertrag"
, WHR_ISO_3_CODE AS "Waehrung"
, KOS_KOA_ST_KZN || ' - ' || ST_LANGBEZ_EN as "Kostenart"
, SUM (KOS_BETRAG) AS "Summe pro KOA"
FROM
KOSTEN
, WAEHRUNG
, SCHLUESSELTABELLE
WHERE
KOSTEN.KOS_VERHI_WHR_ID = WAEHRUNG.WHR_ISO_ID
AND KOSTEN.KOS_KOA_ST_KZN = SCHLUESSELTABELLE.ST_ID
AND KOS_VER_ID in (2509, 2510, 2511)
GROUP BY
KOS_VER_ID
, WHR_ISO_3_CODE
, KOS_KOA_ST_KZN || ' - ' || ST_LANGBEZ_EN
ORDER BY
"Vertrag"
, "Kostenart"
;
Run Code Online (Sandbox Code Playgroud) 我有一个查询,我在其中进行了一些计算,然后为该列指定了别名。在下一列中,我想在 IF 语句中使用该计算的结果。当我将别名用作条件时,MySQL 无法识别它,而是要求我重写整个查询,在它周围放置一些括号,然后执行条件检查。
这是 SQL 查询:
SELECT StudentId
,SubjectID
, (COUNT(StudentId) / (
SELECT COUNT(SubjectID)
FROM lectureattendancein
WHERE SubjectID ='MIS4' ) * 100) AS Percentage
, IF((COUNT(StudentId) / (
SELECT COUNT(SubjectID)
FROM lectureattendancein
WHERE SubjectID ='MIS4'
)* 100) >= 80, 'ALLOWED', 'NOT ALLOWED') AS ExamAdmit
FROM attendancein
GROUP BY StudentId, SubjectID
HAVING SubjectID='MIS4'
ORDER BY StudentId ASC
Run Code Online (Sandbox Code Playgroud)
我想在 IF 语句中使用名为Percentage的列别名
此示例具有用于两个不同表的相同表别名。我不明白为什么 Oracle 允许这样做,如果允许,结果如何有意义。
create table Table_A (x number);
create table Table_B (x number);
insert into Table_A values (1);
insert into Table_A values (2);
insert into Table_B values (2);
insert into Table_B values (3);
select * from Table_A ;
X
----------
1
2
2 rows selected.
select * from Table_B ;
X
----------
2
3
2 rows selected.
select *
from Table_A T
join Table_B T
on T.x = T.x;
X X
---------- ----------
2 2
2 2
3 3
3 …Run Code Online (Sandbox Code Playgroud) 我试图在昨天(不是硬编码)的订单表上获取 IDS 的计数,其中表中的日期对应于下订单的时间。
我的桌子看起来像这样
orders (
order_id INT PRIMARY KEY
, user_id INT
, date_created DATE
, order_value FLOAT
, city_id INT
)
Run Code Online (Sandbox Code Playgroud)
我已使用此代码在表中获取今天的日期 -
Select *,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) as Today
From orders
Run Code Online (Sandbox Code Playgroud)
这很好用,但是当我尝试尝试下面的 where 子句时
Select *,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) as Today
From orders
where Today -1 = date_created;
Run Code Online (Sandbox Code Playgroud)
我收到这个错误“无效的列名‘今天’”所以我的问题只是如何让这个表识别我作为新列添加的日期并允许我对其执行工作?
提前致谢
这是一个简单的问题,但我找不到答案。
我想使用SELECT *语句选择表中的所有列,但我还需要通过这种方式为 UUID 列添加别名:BIN_TO_UUID(ID) as ID。
我需要这样的东西:
SELECT BIN_TO_UUID(ID) AS ID, * FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)
另外,最好删除别名的原始列,以免同一列两次具有不同的名称,但前提是这不会向查询添加更多文本,因为我将不得不对所有 16 个表重复此操作。
我目前有一个查询,我正在执行两个子查询来获取 X、Y 数据:
SELECT
t.series AS week,
( ... ) X,
( ..., AND ... ) Y,
ROUND(( ... ) * 100) / ( ..., AND ... ), 2) Z
FROM series_tmp t
Run Code Online (Sandbox Code Playgroud)
Y 是 X 的子集,因为我只对现有条件应用一个附加条件,如果 X 是:
SELECT COUNT(*)
FROM t1
INNER JOIN t2
ON t2.id = t1.another_id
WHERE t2.something = 1
AND t1.date BETWEEN t.series AND t.series + INTERVAL 6 DAY
Run Code Online (Sandbox Code Playgroud)
那么 Y 还有一个附加的 AND 条件:
SELECT COUNT(*)
FROM t1
INNER JOIN t2
ON t2.id = t1.another_id …Run Code Online (Sandbox Code Playgroud) 我如何在本示例(Oracle 数据库)中pop进一步使用别名case。
select
(select sum(ccs_pop) from rap4) as pop,
case
when pop+x=a+b+c then pop+x
end as sum1,
case
when pop+y=d+e+f then pop+y
end as sum2
from rap4
Run Code Online (Sandbox Code Playgroud)
想法是我在复杂的情况下需要“pop”,并且在很多句子中都需要“pop”,我需要使用别名或其他东西......
SQL Server Native Client(通常缩写为 SNAC)已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中删除。不建议在新开发中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。今后切换到适用于 SQL Server 的新 Microsoft OLE DB 驱动程序 (MSOLEDBSQL) 或最新的适用于 SQL Server 的 Microsoft ODBC 驱动程序。
我曾经使用 SQL Server 配置管理器创建别名,但从 SQL Server 2022 开始,创建别名的表单已禁用所有字段:
如何在 SQL Server 2022 中创建别名,这可能吗?
select
convert(varchar(10), TotalSeconds / 3600) +':'+
convert(varchar(10), TotalSeconds % 3600 / 60) +':'+
convert(varchar(10), TotalSeconds % 60) as Seconds
from
(select
DateDiff
(second, date,outtime )
as TotalSeconds
from attendance.attn_card_register) x -- this one
Run Code Online (Sandbox Code Playgroud) SET @vSelect =
'
SELECT
T1.BranchShortName AS BranchShortName,
(
SELECT TT1.EmployeeName
FROM [dbo].[Tb_OPL_Employee] AS TT1
JOIN [dbo].[Tb_MKT_SKD] AS TT2
ON TT2.IdTb_OPL_Branch = TT1.IdTb_OPL_Branch
JOIN [dbo].[Tb_SYS_Approval] AS TT3
ON TT3.TaskId = TT2.TaskId
WHERE
TT3.IdTb_OPL_JobTitles = TT1.IdTb_OPL_JobTitles
AND TT3.IdTb_OPL_JobTitles =
(
SELECT MAX(TTT3.IdTb_OPL_JobTitles)
FROM [dbo].[Tb_SYS_Approval] AS TTT3
WHERE
TTT3.IsPassed = 1
AND TTT3.ApprovalLevelCode = ''Approve''
AND TTT3.TaskId =TT2.TaskId
)
AND TT3.IdTb_OPL_Branch = TT1.IdTb_OPL_Branch
AND TT2.IdTb_MKT_SKD = T2.IdTb_MKT_SKD
) AS LastApproval,
(
SELECT TT1.EmployeeName
FROM [dbo].[Tb_OPL_Employee] AS TT1
JOIN [dbo].[Tb_MKT_SKD] AS TT2 …Run Code Online (Sandbox Code Playgroud) 我继承了一些这样的代码:
SELECT
Col_1,
Col_2 Col_2,
Col_3
...
Run Code Online (Sandbox Code Playgroud)
别名Col_2实际上有什么作用,还是完全没有必要?