小编Har*_* CO的帖子

SQL - 在一个查询中更新多个记录

我有table - config.架构: config_name | config_value

我想在一个查询中更新多个记录.我试着这样:

UPDATE config 
SET t1.config_value = 'value'
  , t2.config_value = 'value2' 
WHERE t1.config_name = 'name1' 
  AND t2.config_name = 'name2';
Run Code Online (Sandbox Code Playgroud)

但那个查询错了:(

你能帮助我吗?

sql records

114
推荐指数
9
解决办法
51万
查看次数

选择()不按预期工作

当我结合随机整数生成时,CHOOSE()我得到了意想不到的NULL值.

以下应该只返回字母a- e而是NULL也包含在值中:

查询:

;WITH cte AS (SELECT 1 RN
              UNION  ALL 
              SELECT RN + 1 
              FROM cte
              WHERE RN < 100)
SELECT DISTINCT CHOOSE(1 + ABS(CRYPT_GEN_RANDOM(8)%5),'a','b','c','d','e','f')
FROM cte
Run Code Online (Sandbox Code Playgroud)

结果:

NULL
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)

预期成绩:

a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)

随机数生成按预期工作,仅返回值1-5:

;WITH cte AS (SELECT 1 RN
              UNION  ALL 
              SELECT RN + 1 
              FROM cte
              WHERE RN < 50)
SELECT 1 + ABS(CRYPT_GEN_RANDOM(8)%5)
FROM cte
Run Code Online (Sandbox Code Playgroud)

演示:SQL小提琴

CHOOSE() 如下工作(索引从1开始): …

sql sql-server-2012

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

在sql server中使用case语句更新多列

我想使用 case 语句更新表,查询是这样的......

select case(@columnname) when 'name1' then 
                                  begin
                                     update table
                                      set 
                                       pay1=pay1* 100
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end
                        when 'name2' then 
                                       begin
                                     update table
                                      set 
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end

                         when 'name3' then 
                                       begin
                                     update table
                                      set 
                                       pay3=pay3* 100
                                  end
                  end
Run Code Online (Sandbox Code Playgroud)

你能告诉正确的逻辑来使用case语句完成查询吗

sql sql-server sql-server-2008 sql-update sql-server-2012

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

如何使用python基于缩进解析层次结构

我有一个会计树,在源中存储了缩进/空格:

Income
   Revenue
      IAP
      Ads
   Other-Income
Expenses
   Developers
      In-house
      Contractors
   Advertising
   Other Expenses
Run Code Online (Sandbox Code Playgroud)

有固定数量的级别,所以我想通过使用3个字段来平整层次结构(实际数据有6个级别,例如简化):

L1       L2            L3
Income
Income   Revenue
Income   Revenue       IAP
Income   Revenue       Ads
Income   Other-Income
Expenses Developers    In-house
 ... etc
Run Code Online (Sandbox Code Playgroud)

我可以通过检查帐户名称前的空格数来完成此操作:

for rownum in range(6,ws.max_row+1):
   accountName = str(ws.cell(row=rownum,column=1).value)
   indent = len(accountName) - len(accountName.lstrip(' '))
   if indent == 0:
      l1 = accountName
      l2 = ''
      l3 = ''
   elif indent == 3:
      l2 = accountName
      l3 = ''
   else:
      l3 = accountName

   w.writerow([l1,l2,l3])
Run Code Online (Sandbox Code Playgroud)

是否有更灵活的方法来实现这一点,基于当前行与前一行相比的缩进而不是假设每个级别总是3个空格?L1将始终没有缩进,我们可以相信较低级别将比其父级缩进更多,但每个级别可能不总是3个空格.

更新,最后以此作为逻辑的核心,因为我最终想要带有内容的帐户列表,使用缩进来决定是否重置,追加或弹出列表似乎是最简单的:

        if …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
2
解决办法
698
查看次数