• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 246
  • Last Modified:

sql function needed for csv list of fields

Hi All, This is legacy stuff that I have to make work.  I need a function to return a comma separated list of field names for each record.  Let's pretend this is the scenario.

--DROP TABLE tempdb.dbo.mh_account_change_requests

CREATE TABLE tempdb.dbo.mh_account_change_requests (
acr_id INT NOT NULL,
acr_fname VARCHAR(255) NULL,
acr_fname_change BIT NOT NULL,
acr_mname VARCHAR(255) NULL,
acr_mname_change BIT NOT NULL,
acr_lname VARCHAR(255) NULL,
acr_lname_change BIT NOT NULL)

INSERT INTO tempdb.dbo.mh_account_change_requests VALUES (1, 'Greg', 1, NULL, 0, 'Brady', 1)
INSERT INTO tempdb.dbo.mh_account_change_requests VALUES (2, NULL, 0, 'Pete', 1, 'Brady', 1)
INSERT INTO tempdb.dbo.mh_account_change_requests VALUES (3, 'Bobby', 1, 'Brady', 1, NULL, 0)

SELECT *, <plus a comma separated list OF the change field NAME> AS changerequests FROM tempdb.dbo.mh_account_change_requests

For results that look like this:
desired results
0
MariaHalt
Asked:
MariaHalt
  • 3
  • 3
  • 2
  • +1
1 Solution
 
MariaHaltAuthor Commented:
I only want the fields where the bit = 1.
0
 
MariaHaltAuthor Commented:
Also, I don't want to export them to a file, I just need the results in an additional field.
0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
BurundiLappCommented:
I experienced an error whilst testing this, it wouldn't let me create a row of column names and then union that with a full select from the table as some of the fields where set to 'int' and the column names weren't integers.

My code was:
select 'Code','Description','Address1','Address2','Address3','Address4','Postcode','Tel'

union

select * from branches

Open in new window


And I got the error:

Conversion failed when converting the varchar value 'Code' to data type int.

Open in new window


However if you were to cast or convert each integer field to nchar in your main select statement it may work!
0
 
nemws1Commented:
First off, that you so much for providing some sample SQL code.  It is so very helpful!!!

I'm thinking you want to use STUFF along with XML PATH.  (This is basically the same as MySQL's GROUP_CONCAT function), but usually that means grouping by something (a key?)

In your example code, what is the comma seperated list that you're looking for/results that you want?

You most likely want something using this code - I'm just trying to figure out what it is you exactly want.

SELECT STUFF(
             (SELECT ',' + Column_Name 
              FROM Table_Name
              FOR XML PATH (','))
             , 1, 1, '')

Open in new window

0
 
nemws1Commented:
BurundiLapp - I think you posted this to wrong thread question.
0
 
BurundiLappCommented:
I think I may have, sorry OP.
0
 
BAKADYCommented:
SELECT *,
  STUFF((
    SELECT ', ' + COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'mh_account_change_requests'
       AND (
          (COLUMN_NAME = 'acr_fname' AND Not acr_fname Is NULL)
         OR
          (COLUMN_NAME = 'acr_mname' AND Not acr_mname Is NULL)
         OR
          (COLUMN_NAME = 'acr_lname' AND Not acr_lname Is NULL)
         )
    ORDER BY ordinal_position
    FOR XML PATH('')
  ),1,2,'')
FROM mh_account_change_requests

Open in new window


to try the code above look by SQL-Fiddle

http://sqlfiddle.com/#!3/a88e3/3
0
 
MariaHaltAuthor Commented:
Beyond Excellent!  Thank you!!! Exactly what I wanted.
0

Featured Post

Veeam and MySQL: How to Perform Backup & Recovery

MySQL and the MariaDB variant are among the most used databases in Linux environments, and many critical applications support their data on them. Watch this recorded webinar to find out how Veeam Backup & Replication allows you to get consistent backups of MySQL databases.

  • 3
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now