小编Luk*_*zda的帖子

Aggregate CASE语句中COUNT和SUM之间的差异

完全披露,我正在学习,我已经在互联网上搜索,我只是无法弄清楚我的问题.

我正在进行在线课程,并给出了以下示例:

select 
     DATENAME(MONTH, DATEADD(MONTH, MONTH(OrderDate), -1)) AS  'Month',
     SUM(CASE WHEN YEAR(OrderDate) = 2005 THEN 1 ELSE 0 END) AS Orders,
     SUM(CASE YEAR(OrderDate) WHEN 2005 THEN Totaldue ELSE 0 END) AS 'Total Value'
from
    sales.salesorderheader
group by Month(orderdate)
order by Month(orderdate) ASC
Run Code Online (Sandbox Code Playgroud)

返回以下结果:

结果1

我明白了(我想)所以我开始搞乱代码以进一步理解Case语句.查看代码我认为Orders字段基本上是在一个月内查找所有订单,为每个订单分配1,然后将它们全部添加.因为每个人都分配了1我认为我可以将SUM更改为COUNT,我会得到相同的结果.

但是,这段代码:

select 
     DATENAME(MONTH, DATEADD(MONTH, MONTH(OrderDate), -1)) AS  'Month',
     COUNT(CASE WHEN YEAR(OrderDate) = 2005 THEN 1 ELSE 0 END) AS Orders,
     SUM(CASE YEAR(OrderDate) WHEN 2005 THEN Totaldue ELSE 0 END) AS 'Total Value'
from
    sales.salesorderheader
group by …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

带参数的CASE语句构造

有人可以告诉我,以下施工有什么问题?:

 CASE @CountryID
        WHEN 1 THEN SET @String = REPLACE(@String,'+420','')
        WHEN 2 THEN SET @String = REPLACE(@String,'+421','')    
        WHEN 3 THEN SET @String = REPLACE(@String,'+359','')    
        WHEN 4 THEN SET @String = REPLACE(@String,'+7','')  
        WHEN 5 THEN SET @String = REPLACE(@String,'+48','') 
        WHEN 7 THEN SET @String = REPLACE(@String,'+63','') 
    END
Run Code Online (Sandbox Code Playgroud)

@CountryIDINT.

问题出现在CASE声明构造中,因为IF语句运行良好,但我看不到任何故障,尝试了不同类型的案例构建并搜索了文档.

任何提示都会很感激.

sql t-sql sql-server case

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

SQL Server查询删除百分比

我想知道是否有一种方法可以使用SQL中的替换函数来专门查找百分比?

比如说我有数据:

  • 奥利在1%的时间里都在工作
  • Ollie 2在2%的时间里都在工作
  • Ben的工作时间占2.1%

我不想仅在结果中替换百分比中的其他数字.

我目前有没有办法做到这一点:

UPDATE DataTable SET PersonInfo = replace(PersonInfo, '%', '' );
Run Code Online (Sandbox Code Playgroud)

但我不知道如何选择与百分比相关的数据(数字)......

期望的输出:

  • 奥利正处于当时的工作中
  • 奥利2正处于当时的工作中
  • Ben正处于当时的工作中

t-sql sql-server replace percentage

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

2选择中的ISNULLS

有没有更好的方法来做这个或这个代码好吗?

DECLARE  @Test DECIMAL(18,2) = NULL
        , @Test1 DECIMAL(18,2) = '5'

SELECT ISNULL(@Test,(ISNULL(@Test1,'0')))
Run Code Online (Sandbox Code Playgroud)

谢谢,EB

t-sql isnull

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

为什么SQL将此标记为'Order'附近的错误/不正确的语法?

有时SQL Server会给我这样的随机错误.我不喜欢SQL,但我很确定这段代码没有错...

"订单"附近的语法不正确

CREATE TABLE Order
(
    OrderNumber INTEGER PRIMARY KEY,
    OrderDate DATE,
    CustomerNumber INTEGER,
    CustomerPONumber INTEGER,
    OrderTotal FLOAT,
    OrderStatus VARCHAR(10),
    OrderSpecialCharges FLOAT,
    OrderSpecialChargeDescription VARCHAR(50),
    ShipName VARCHAR (20),
    ShipAddress1 VARCHAR (10),
    ShipAddress2 VARCHAR (10),
    ShipCity VARCHAR (10),
    ShipState CHAR (2),
    ShipZip INTEGER,
    FOREIGN KEY (CustomerNumber) REFERENCES Customer
);
Run Code Online (Sandbox Code Playgroud)

sql-server

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

int和string之间的唯一索引

我有这个问题,我想在整数和字符串之间创建一个唯一的索引,但它给了我以下问题.我怎样才能完成这项工作?为什么不允许这样做?因为我实际上真的想要这个独特的组合,以确保数据库中没有存储双标签.

表'dbo.HostingReportGroups'中的列'Label'的类型无效,无法用作索引中的键列.

我用于此的模型如下:

public class HostingReportGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Index("UniqueCustomerAndLabel", 1, IsUnique = true)]
    public int CustomerId { get; set; }

    [Index("UniqueCustomerAndLabel", 2, IsUnique = true)]
    public string Label { get; set; }

    public virtual ICollection<HostingReportGroupList> HostingReportGroupLists { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行的迁移包含以下代码:

public partial class adding_unique_key_to_hosting_report_group : DbMigration
{
    public override void Up()
    {
        CreateIndex("dbo.HostingReportGroups", new[] { "CustomerId", "Label" }, unique: true, name: "UniqueCustomerAndLabel");
    }

    public override void Down()
    {
        DropIndex("dbo.HostingReportGroups", "UniqueCustomerAndLabel"); …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework

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

oracle ddl trigger:在删除之前创建备份表

我想用ddl触发器(在放置之前)创建一个备份表,并遇到以下问题.

发生第一次丢弃时没关系:a_backup表包含丢弃表的数据.但为什么我不能放弃另一张桌子?

ORA-01031:权限不足



create table b (x number);
Run Code Online (Sandbox Code Playgroud)

- 表B已创建.

create table a (x number);
Run Code Online (Sandbox Code Playgroud)

- 表A已创建.

create table a_backup as select * from a where 1 = 0;
Run Code Online (Sandbox Code Playgroud)

- 表A_BACKUP已创建.

create or replace trigger a_backup_tr
    before drop
    on database
begin
    IF ora_dict_obj_name <> 'A' then
    null;
    ELSIF ora_dict_obj_name = 'A'
    and ora_dict_obj_owner = 'TRANEE' then
    insert into a_backup
    select * from a;
    ELSE null;
    end if;
end;
/
Run Code Online (Sandbox Code Playgroud)

- 触发A_BACKUP_TR编译


-- 1

drop table a;
Run Code Online (Sandbox Code Playgroud)

- 表A下降.


-- 2 …
Run Code Online (Sandbox Code Playgroud)

oracle triggers plsql ddl-trigger

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

如果成功提交嵌套事务,则父事务是否可能失败

我正在尝试理解SQL Server中的嵌套事务.让我们考虑以下SQL命令链:

BEGIN TRANSACTION; -- #1
BEGIN TRANSACTION; -- #2
UPDATE foo SET column = 'something'; -- Change something in one table.
COMMIT TRANSACTION; -- #2
Run Code Online (Sandbox Code Playgroud)

如果事务#2的提交成功,那么事务#1的提交可能会失败吗?如果是的话,你可以提供一个可能发生这种情况的例子吗?

sql t-sql sql-server transactions nested-transactions

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

如何在Oracle查询中仅获取一个特定的NEXTVAL结果?

在我的存储过程中,我运行像soi这样的查询:

SELECT NETWORKOWNER.BUS_SEQ.NEXTVAL@LEGACYSMITH.WORLD 
FROM TBLDECIDERCONTRACT@LEGACYSMITH.WORLD
WHER PROVID = 28938
Run Code Online (Sandbox Code Playgroud)

如何仅获得一个 NEXTVAL结果?

sql oracle plsql

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

SQL使用oracle SQL上的查询测试外键

说我有两张桌子

CREATE TABLE Employees (
        Employee_ID number(8),
        Employee_Name varchar2(100) NOT NULL,
        CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID));

CREATE TABLE Drivers(
        Driver_ID number(8) NOT NULL,
        Employee_ID number(8) NOT NULL,
        CONSTRAINT pk_DriverID PRIMARY KEY (Driver_ID),
        CONSTRAINT fk_EmployeeDataTwo FOREIGN KEY (Employee_ID) REFERENCES Employees(Employee_ID));
Run Code Online (Sandbox Code Playgroud)

如何使用查询来使用驱动程序中的外键来检查员工列表中的名称?例如

select employee_name 
from employees 
inner join drivers on employees.employee_name = drivers.employee_name; 
Run Code Online (Sandbox Code Playgroud)

哪个不起作用

sql oracle

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