小编Ian*_*Ian的帖子

SQL子查询 - 有更好的方法

这是一个SQL效率问题.

不久前,我不得不编写一系列查询来从ERP系统中提取数据.其中大部分都很简单,但其中一个导致了一个相当低效的查询,并且一直困扰着我,因为必须有更好的方法.

问题并不复杂.您有一系列销售数据.在每一行中,您都有数量,销售价格和销售员代码以及其他信息.

佣金是基于阶梯式滑动比例支付的.他们卖的越多,佣金越多.步数可能是1000,10000,10000 $等等.现实世界的问题更复杂,但就其本质而言.

我发现这样做的唯一方法是做这样的事情(显然不是真正的查询)

select qty, price, salesman,
  (select top 1 percentage from comissions 
    where comisiones.salesman = saleslines.salesman 
    and saleslines.qty > comisiones.qty
    order by comissiones.qty desc
  ) percentage
from saleslines 
Run Code Online (Sandbox Code Playgroud)

这导致了正确的佣金,但是非常沉重.

有没有更好的方法呢?我不是在找人重写我的sql,更多的是"看看foobar查询",我可以从那里拿走它.

可以为不同的销售人员,物品和客户甚至销售日期指定现实生活佣金结构.它也会不时变化,所以一切都必须由表中的数据驱动...即我不能在sql中放置固定范围.当前查询返回大约3-400000行,大约需要20-30秒.幸运的是它只用了一个月,但缓慢有点烦我.

这是在mssql上.

伊恩

编辑:

我应该从一开始就给出一个更复杂的例子.我现在意识到,我最初的例子是遗漏了复杂性的一些基本要素,向所有人道歉.

这可能更好地捕获它

select client-code, product, product-family, qty, price, discount, salesman,
    (select top 1 percentage from comissions 
        where comisiones.salesman = saleslines.salesman 
        and saleslines.qty > comisiones.qty
        and [
           a collection of conditions which may or may not apply:
           Exclude rows if the salesman has …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance

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

PowerShell - 向数组添加列

假设您正在做这样的事情:

$partitions = get-wmiobject -query "Associators of {Win32_DiskDrive.DeviceID=""$DevID""} WHERE AssocClass = Win32_DiskDriveToDiskPartition" -computer $ComputerName
Run Code Online (Sandbox Code Playgroud)

如果你想获得每个磁盘的磁盘标题('C:'),你需要这样的东西:

function GetDiskCaption {
   param ($Partition, $ComputerName)

    $DeviceID = $Partition.DeviceID
    $colLogicalDisk = get-wmiobject -query "Associators of {Win32_DiskPartition.DeviceID=""$DeviceID""} WHERE AssocClass = Win32_LogicalDiskToPartition" -computer $ComputerName

   If ($colLogicalDisk.Caption -ne $null) {
      return $colLogicalDisk.Caption
   }
   Else {
       return "UNASSIGNED"
   }
}
Run Code Online (Sandbox Code Playgroud)

我不是一个非常高级的PowerShell用户,所以问题是:什么是将磁盘标题添加到阵列的最佳PowerShell方式,以便可以将其输入到ft或其他脚本中?

现在我意识到我可以只执行一个foreach循环来打印出来,但是我想弄清楚如何使用额外的列扩展数组,以便我可以使用管道运算符来格式化数组.

Microsoft网站上关于数组处理的示例都基于一维数组,因此添加数组似乎不是答案.

我特意尝试编写一个脚本来转储磁盘列表,以及它们的iSCSI映射(如果有的话)以及该磁盘上的各个分区.

powershell

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

如何让powershell始终返回一个列表

我正在尝试在系统上获得主监视器的分辨率.所以

get-wmiobject -class win32_videocontroller
Run Code Online (Sandbox Code Playgroud)

将返回包含分辨率的单个对象或对象列表(术语可能不正确).如果要拉出单个值,例如.currenthorizo​​ntalresolution,则必须指定

(get-wmiobject -class win32_videocontroller).currenthorizontalresolution
Run Code Online (Sandbox Code Playgroud)

要么

(get-wmiobject -class win32_videocontroller)[0].currenthorizontalresolution
Run Code Online (Sandbox Code Playgroud)

取决于您的系统是否具有单个监视器,第一个工作的位置,或多个监视器,其中第二个工作.

我想使用单个表达式...但无法正确使用语法.我已经尝试了很多变化,但我无法弄清楚使用单行来获得第一个(或唯一)监视器的分辨率的语法.

要明确这是一个powershell语法问题,而不是wmi问题.

EBGreen建议

(,(get-wmiobject -class win32_videocontroller))[0].currenthorizontalresolution
Run Code Online (Sandbox Code Playgroud)

但这会回来

1366
Run Code Online (Sandbox Code Playgroud)

在具有单个监视器的系统上

1280
1920
Run Code Online (Sandbox Code Playgroud)

在有两个显示器的系统上.方向是正确的,我尝试了类似的选择,但不是很正确.

powershell

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

标签 统计

powershell ×2

performance ×1

sql ×1

sql-server ×1