我在获取加密值时遇到错误
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF
标签,实际上我试图获取表的透视值,我有两个表有数千行值但是为了简单起见我在下面给出了一些 -
individual_data table as,
-----------------------------------
|ID |fieldname |answertext|
-----------------------------------
|30101 |state |0 |
-----------------------------------
|30101 |Number |4 |
-----------------------------------
|30101 |Name |Rajbanshi |
-----------------------------------
|30101 |Main |RAJBANSHI |
-----------------------------------
|30101 |Surname |RAJBANSHI |
-----------------------------------
|30201 |state |0 |
-----------------------------------
|30201 |Number |4 |
-----------------------------------
|30201 |Name |Pawar |
-----------------------------------
|30201 |Main |Ramesh |
-----------------------------------
|30201 |Surname |Pawar |
-----------------------------------
*注意 - 在此表中'aswertext'字段已加密,但为了清楚起见,我已经给出了实际值,我需要将这些值显示在输出中...
和sms_household表为,
-------------------------
|HHID |sampletype |urid|
-------------------------
|30100 |3 |3008|
-------------------------
|30200 |4 |3005|
-------------------------
并希望得到所需的结果,
------------------------------------------------------------------------------
|ID |state |Number |Name |Main |Surname |sampletype |urid |
------------------------------------------------------------------------------
|30101 |0 |4 |Rajbanshi |RAJBANSHI |RAJBANSHI |3 |3008 |
------------------------------------------------------------------------------
|30201 |0 |4 |Pawar |Ramesh |Pawar |4 |3005 |
------------------------------------------------------------------------------
对于同样的我写了像
这样的查询SET @@group_concat_max_len = 3000;
SET @sql = NULL;
SELECT
GROUP CONCAT (DISTINCT
CONCAT(
'MAX(IF(I.fieldname = ''',
fieldname,
''', convert(aes_decrypt(answertext,'xyz')USING utf8), NULL)) AS ',
fieldname
)
) INTO @sql
FROM individual_data;
SET @sql = CONCAT('SELECT I.ID, H.sampletype, H.urid', @sql,
'FROM individual_data I inner join sms_household H on H.hhid = concat'(left(I.ID,4),'0')' and H.hhid like '30%' and H.urid like '30%' GROUP BY I.prim_key');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;`
但是我在`convert(aes_decrypt(answertext,'basbas')USING utf8)中得到了语法错误信息,NULL))AS'.....
我没有得到这段代码的错误.. !!
答案 0 :(得分:0)
您的代码非常难以理解。至少你有group_concat()
的拼写错误和'xyz'
左右的引用不足。
这些类型的陈述很难构建。我喜欢使用replace()
而不是concat()
的方法。这使得更清楚地看到最终表达式的结构。
所以,像这样:
set @exp = 'max(case when i.fieldname = ''@f''
then convert(aes_decrypt(@a, ''xyz'') USING utf8)
end) as @f'
select group_concat(distinct replace(replace(@exp, '@f', fieldname
), '@a', answertext
)
) INTO @sql
FROM individual_data;
我不是100%确定这是否是你的意图,但这应该会让你走上更好的道路。